def get_json_search_results(tree_name, query): try: search_string = query['q'][0] except: search_string = '' try: fold_case = query['case'][0] != 'true' except: fold_case = True try: regexp = query['regexp'][0] == 'true' except: regexp = False try: path_filter = query['path'][0] except: path_filter = '' parsed = parse_search(search_string) # Should we just be leaving this in parsed? context_lines = 0 if 'context_lines' in parsed: context_lines = parsed['context_lines'] if path_filter: parsed['pathre'] = parse_path_filter(path_filter) if regexp: if 'default' in parsed: del parsed['default'] if 're' in parsed: del parsed['re'] parsed['re'] = search_string if 'default' in parsed and len(parsed['default']) == 0: del parsed['default'] if is_trivial_search(parsed): results = {} return json.dumps(results) title = search_string if not title: title = 'Files ' + path_filter search = SearchResults() work_limit = False hit_timeout = False if 'symbol' in parsed: search.set_path_filter(parsed.get('pathre')) symbols = parsed['symbol'] title = 'Symbol ' + symbols search.add_results(crossrefs.lookup(tree_name, symbols)) elif 're' in parsed: path = parsed.get('pathre', '.*') (substr_results, timed_out) = codesearch.search(parsed['re'], fold_case, path, tree_name, context_lines) search.add_results({'Textual Occurrences': substr_results}) hit_timeout |= timed_out elif 'id' in parsed: search.set_path_filter(parsed.get('pathre')) identifier_search(search, tree_name, parsed['id'], complete=True, fold_case=fold_case) elif 'default' in parsed: work_limit = True path = parsed.get('pathre', '.*') (substr_results, timed_out) = codesearch.search(parsed['default'], fold_case, path, tree_name, context_lines) search.add_results({'Textual Occurrences': substr_results}) hit_timeout |= timed_out if 'pathre' not in parsed: file_results = search_files(tree_name, parsed['default']) search.add_results({'Files': file_results}) identifier_search(search, tree_name, parsed['default'], complete=False, fold_case=fold_case) elif 'pathre' in parsed: path = parsed['pathre'] search.add_results({'Files': search_files(tree_name, path)}) else: assert False results = {} results = search.get(work_limit) results['*title*'] = title results['*timedout*'] = hit_timeout return json.dumps(results)
def get_json_search_results(tree_name, query): try: search_string = query['q'][0] except: search_string = '' try: fold_case = query['case'][0] != 'true' except: fold_case = True try: regexp = query['regexp'][0] == 'true' except: regexp = False try: path_filter = query['path'][0] except: path_filter = '' parsed = parse_search(search_string) if path_filter: parsed['pathre'] = parse_path_filter(path_filter) if regexp: if 'default' in parsed: del parsed['default'] if 're' in parsed: del parsed['re'] parsed['re'] = search_string if 'default' in parsed and len(parsed['default']) == 0: del parsed['default'] if is_trivial_search(parsed): results = {} return json.dumps(results) title = search_string if not title: title = 'Files ' + path_filter search = SearchResults() if 'symbol' in parsed: search.set_path_filter(parsed.get('pathre')) symbols = parsed['symbol'] title = 'Symbol ' + symbols search.add_results(crossrefs.lookup(tree_name, symbols)) elif 're' in parsed: path = parsed.get('pathre', '.*') substr_results = codesearch.search(parsed['re'], fold_case, path, tree_name) search.add_results({'Textual Occurrences': substr_results}) elif 'id' in parsed: search.set_path_filter(parsed.get('pathre')) identifier_search(search, tree_name, parsed['id'], complete=True, fold_case=fold_case, limit5=False) elif 'default' in parsed: path = parsed.get('pathre', '.*') substr_results = codesearch.search(parsed['default'], fold_case, path, tree_name) search.add_results({'Textual Occurrences': substr_results}) if 'pathre' not in parsed: file_results = search_files(tree_name, parsed['default']) search.add_results({'Files': file_results}) identifier_search(search, tree_name, parsed['default'], complete=False, fold_case=fold_case) elif 'pathre' in parsed: path = parsed['pathre'] search.add_results({'Files': search_files(tree_name, path)}) else: assert False results = {} results = search.get() results['*title*'] = title return json.dumps(results)