MCPcopy Index your code
hub / github.com/diffgram/diffgram / QueryCreator

Class QueryCreator

shared/query_engine/query_creator.py:18–116  ·  view source on GitHub ↗

Responsible for creating a DiffgramQuery based on the defined syntax.

Source from the content-addressed store, hash-verified

16
17
18class QueryCreator:
19 """
20 Responsible for creating a DiffgramQuery based on the defined syntax.
21 """
22
23 def __init__(self, session, project, member, directory = None):
24 self.project = project
25 self.session = session
26 self.member = member
27 self.directory = directory
28 # Additional security check just for sanity
29 Project_permissions.by_project_core(
30 project_string_id = self.project.project_string_id,
31 Roles = ["admin", "Editor", "Viewer", "allow_if_project_is_public"],
32 apis_project_list = [],
33 apis_user_list = ['security_email_verified']
34 )
35 self.log = regular_log.default()
36 self.parser = Lark(grammar_definition,
37 parser = 'lalr',
38 transformer = None)
39
40 def get_suggestions(self, query_string):
41 suggest_type = 'entities'
42 if query_string == '':
43 return ENTITY_TYPES, suggest_type
44 try:
45 result = self.parser.parse(query_string)
46 # If the query is correct we try the interactive parser to see next possible tokens of valid query.
47 interactive = self.parser.parse_interactive(query_string)
48 interactive.exhaust_lexer()
49 suggestions = [x for x in interactive.accepts() if x != '$END']
50 suggest_type = 'boolean_operator'
51 return suggestions, suggest_type
52 except UnexpectedCharacters as chars_exception:
53 if type(chars_exception) == UnexpectedCharacters:
54 if chars_exception.char == '.':
55 last_token = chars_exception.state.value_stack[len(chars_exception.state.value_stack) - 1]
56 suggestions = []
57 num_nested = len(last_token.value.split('.'))
58 if last_token.type == 'COMPARE_OP':
59 suggestions.append('$number')
60 suggestions.append('$text')
61 suggest_type = 'text'
62 return suggestions, suggest_type
63 if num_nested == 1:
64 if last_token.value in ['label', 'labels']:
65 # Show available labels in project.
66 labels = self.project.get_label_list(self.session,
67 directory = self.project.directory_default)
68 for label in labels:
69 suggestions.append(label['label']['name'])
70 suggest_type = 'labels'
71 elif last_token.value in ['file', 'files']:
72 # TODO: add metadata suggestions
73 keys = File.get_metadata_keys(session = self.session,
74 project = self.project,
75 directory = self.directory)

Callers 12

test_startMethod · 0.90
test_exprMethod · 0.90
test_termMethod · 0.90
test_factorMethod · 0.90
test_compare_exprMethod · 0.90
test_execute_queryMethod · 0.90
test_get_suggestionsMethod · 0.90
test_create_queryMethod · 0.90
query_suggest_coreFunction · 0.90

Calls

no outgoing calls

Tested by 9

test_startMethod · 0.72
test_exprMethod · 0.72
test_termMethod · 0.72
test_factorMethod · 0.72
test_compare_exprMethod · 0.72
test_execute_queryMethod · 0.72
test_get_suggestionsMethod · 0.72
test_create_queryMethod · 0.72