33from rich .console import Console
44
55from .tree_view import print_json_analysis , print_compact_tree
6- from .search import JsonSearcher , SearchMode
6+ from .search import JsonSearcher
77from .stats import DataStatsAnalyzer
88from .visualizer import JSONVisualizer
9- from .filter_parser import FilterExpressionParser
109from .logging_config import get_logger
1110
1211logger = get_logger (__name__ )
@@ -69,8 +68,6 @@ def run(self, args: Any) -> int:
6968 if getattr (args , "plot" , False ):
7069 self ._handle_visualization (args )
7170
72- # Note: Code generation is handled by main.py -> handle_codegen_command()
73- # This keeps the CLI focused on core analysis features
7471 return 0
7572
7673 def _handle_tree_display (self , tree_type : str ) -> None :
@@ -93,53 +90,29 @@ def _handle_tree_display(self, tree_type: str) -> None:
9390 self .console .print (f"❌ [red]Unknown tree type: { tree_type } [/red]" )
9491
9592 def _handle_search (self , args : Any ) -> None :
96- """Handle search operations.
93+ """Handle JMESPath search operations.
9794
9895 Args:
9996 args: Parsed CLI arguments containing search parameters.
10097 """
101- search_mode = SearchMode (args .search_mode )
102- search_term = args .search
103-
104- logger .info (
105- "Performing search: type=%s, term=%s" , args .search_type , search_term
106- )
107-
108- # Determine search type
109- results = []
110- if args .search_type == "key" :
111- results = self .searcher .search_keys (self .data , search_term , search_mode )
112- elif args .search_type == "value" :
113- results = self .searcher .search_values (self .data , search_term , search_mode )
114- elif args .search_type == "pair" :
115- if not getattr (args , "search_value" , None ):
116- self .console .print (
117- "❌ [red]--search-value required for pair search[/red]"
118- )
119- logger .warning ("Pair search attempted without search_value" )
120- return
121- results = self .searcher .search_key_value_pairs (
122- self .data , search_term , args .search_value , search_mode , search_mode
123- )
124- elif args .search_type == "filter" :
125- try :
126- filter_func = FilterExpressionParser .parse_filter (search_term )
127- results = self .searcher .search_with_filter (self .data , filter_func )
128- except Exception as e :
129- self .console .print (f"❌ [red]Filter error: { e } [/red]" )
130- logger .error ("Filter search failed: %s" , e )
131- return
132- else :
133- self .console .print (f"❌ [red]Unknown search type: { args .search_type } [/red]" )
134- logger .warning ("Unknown search type: %s" , args .search_type )
98+ query = args .search
99+ logger .info ("Performing JMESPath search: %s" , query )
100+
101+ # Validate query first
102+ valid , error = self .searcher .validate_query (query )
103+ if not valid :
104+ self .console .print (f"❌ [red]Invalid JMESPath query: { error } [/red]" )
105+ logger .error ("Invalid JMESPath query: %s" , error )
135106 return
136107
108+ # Execute search
109+ result = self .searcher .search (self .data , query )
110+
137111 # Display results
138- if results :
112+ if result :
139113 show_tree = getattr (args , "tree_results" , False )
140- self .searcher .print_results (results , show_tree = show_tree , mode = search_mode )
141- self .console .print (f"\n 📊 Found { len (results )} result(s)" )
142- logger .info ("Search completed: %d results found" , len (results ))
114+ self .searcher .print_result (result , show_tree = show_tree )
115+ logger .info ("Search completed successfully" )
143116 else :
144117 self .console .print ("[yellow]No results found.[/yellow]" )
145118 logger .info ("Search completed: no results found" )
@@ -161,7 +134,7 @@ def _handle_visualization(self, args: Any) -> None:
161134 Args:
162135 args: Parsed CLI arguments containing visualization options.
163136 """
164- plot_format = getattr (args , "plot_format" , "matplotlib " )
137+ plot_format = getattr (args , "plot_format" , "interactive " )
165138 save_path = getattr (args , "save_path" , None )
166139 detailed = getattr (args , "detailed" , False )
167140 open_browser = not getattr (args , "no_browser" , False )
0 commit comments