Changeset View
Changeset View
Standalone View
Standalone View
swh/search/translator.py
Show All 34 Lines | def __init__(self): | ||||
search_ql = Language(ql_path, "swh_search_ql") | search_ql = Language(ql_path, "swh_search_ql") | ||||
self.parser = Parser() | self.parser = Parser() | ||||
self.parser.set_language(search_ql) | self.parser.set_language(search_ql) | ||||
self.query = "" | self.query = "" | ||||
def parse_query(self, query): | def parse_query(self, query): | ||||
self.query = query | self.query = query.encode() | ||||
tree = self.parser.parse(query.encode("utf8")) | tree = self.parser.parse(self.query) | ||||
self.query_node = tree.root_node | self.query_node = tree.root_node | ||||
if self.query_node.has_error: | if self.query_node.has_error: | ||||
raise Exception("Invalid query") | raise Exception("Invalid query") | ||||
return self._traverse(self.query_node) | return self._traverse(self.query_node) | ||||
def _traverse(self, node): | def _traverse(self, node): | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | def _get_value(self, node): | ||||
and node.children[-1].type == "]" | and node.children[-1].type == "]" | ||||
): | ): | ||||
# array | # array | ||||
return [self._get_value(child) for child in node.children if child.is_named] | return [self._get_value(child) for child in node.children if child.is_named] | ||||
start = node.start_point[1] | start = node.start_point[1] | ||||
end = node.end_point[1] | end = node.end_point[1] | ||||
value = self.query[start:end] | value = self.query[start:end].decode() | ||||
if len(value) > 1 and ( | if len(value) > 1 and ( | ||||
(value[0] == "'" and value[-1] == "'") or (value[0] and value[-1] == '"') | (value[0] == "'" and value[-1] == "'") or (value[0] and value[-1] == '"') | ||||
): | ): | ||||
return unescape(value[1:-1]) | return unescape(value[1:-1]) | ||||
if node.type in ["number", "numberVal"]: | if node.type in ["number", "numberVal"]: | ||||
return int(value) | return int(value) | ||||
▲ Show 20 Lines • Show All 187 Lines • Show Last 20 Lines |