def __init__(self, notification_request, user_id): super(DetectionEventProcessor, self).__init__(notification_request,user_id) parser = QueryLanguage() search_string = self.notification._res_obj.delivery_config.processing['search_string'] self.query_dict = parser.parse(search_string)
def es_map_query(self, query): """ Maps an query request to an ElasticSearch query """ if not self.use_es: raise BadRequest("Can not make queries without ElasticSearch, enable in res/config/pyon.yml") if QueryLanguage.query_is_term_search(query): return ep.ElasticQuery.wildcard(field=query["field"], value=query["value"]) if QueryLanguage.query_is_range_search(query): return ep.ElasticQuery.range( field=query["field"], from_value=query["range"]["from"], to_value=query["range"]["to"] )
def es_map_query(self, query): ''' Maps an query request to an ElasticSearch query ''' if not self.use_es: raise BadRequest('Can not make queries without ElasticSearch, enable in res/config/pyon.yml') if QueryLanguage.query_is_term_search(query): return ep.ElasticQuery.wildcard(field=query['field'],value=query['value']) if QueryLanguage.query_is_range_search(query): return ep.ElasticQuery.range( field = query['field'], from_value = query['range']['from'], to_value = query['range']['to'] )
def query_request(self, query=None, limit=0, id_only=False): validate_is_instance(query,dict, 'invalid query') #--------------------------------------------- # Term Search #--------------------------------------------- if QueryLanguage.query_is_term_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id= source_id, field = query['field'], value = query['value'], limit = limit, id_only = id_only ) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_term(**kwargs) #--------------------------------------------- # Fuzzy searching (phrases and such) #--------------------------------------------- elif QueryLanguage.query_is_fuzzy_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id= source_id, fuzzy = True, field = query['field'], value = query['fuzzy'], limit = limit, id_only = id_only ) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_term(**kwargs) #--------------------------------------------- # Association Search #--------------------------------------------- elif QueryLanguage.query_is_association_search(query): kwargs = dict( resource_id = query['association'], id_only = id_only ) if query.get('depth'): kwargs['depth'] = query['depth'] return self.query_association(**kwargs) elif QueryLanguage.query_is_owner_search(query): kwargs = dict( resource_id = query['owner'], id_only = id_only ) if query.get('depth'): kwargs['depth'] = query['depth'] return self.query_owner(**kwargs) #--------------------------------------------- # Range Search #--------------------------------------------- elif QueryLanguage.query_is_range_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id = source_id, field = query['field'], limit = limit, id_only = id_only ) if get_safe(query,'range.from') is not None: kwargs['from_value'] = query['range']['from'] if get_safe(query,'range.to') is not None: kwargs['to_value'] = query['range']['to'] if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_range(**kwargs) #--------------------------------------------- # Time Search #--------------------------------------------- elif QueryLanguage.query_is_time_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id = source_id, field = query['field'], limit = limit, id_only = id_only ) if get_safe(query,'range.from') is not None: kwargs['from_value'] = query['range']['from'] if get_safe(query,'range.to') is not None: kwargs['to_value'] = query['range']['to'] if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_time(**kwargs) #--------------------------------------------- # Collection Search #--------------------------------------------- elif QueryLanguage.query_is_collection_search(query): return self.query_collection( collection_id = query['collection'], id_only = id_only ) #--------------------------------------------- # Geo Distance Search #--------------------------------------------- elif QueryLanguage.query_is_geo_distance_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id = source_id, field = query['field'], origin = [query['lon'], query['lat']], distance = query['dist'], units = query['units'], id_only = id_only ) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_geo_distance(**kwargs) #--------------------------------------------- # Geo Bounding Box Search #--------------------------------------------- elif QueryLanguage.query_is_geo_bbox_search(query): source_id = self._match_query_sources(query['index']) or query['index'] kwargs = dict( source_id = source_id, field = query['field'], top_left = query['top_left'], bottom_right = query['bottom_right'], id_only = id_only, ) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_geo_bbox(**kwargs) #@todo: query for couch raise BadRequest('improper query: %s' % query)
def subscription_callback(self, message, headers): if QueryLanguage.evaluate_condition(message, self.query_dict): self.generate_event(message) # pass in the event message so we can put some of the content in the new event.
def _parse_query_string(self, query_string): """Given a query string in Discovery service DSL, parse and return query structure""" parser = QueryLanguage() query_request = parser.parse(query_string) return query_request
def query_request(self, query=None, limit=0, id_only=False): validate_is_instance(query, dict, "invalid query") # --------------------------------------------- # Term Search # --------------------------------------------- if QueryLanguage.query_is_term_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict(source_id=source_id, field=query["field"], value=query["value"], limit=limit, id_only=id_only) if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_term(**kwargs) # --------------------------------------------- # Fuzzy searching (phrases and such) # --------------------------------------------- elif QueryLanguage.query_is_fuzzy_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict( source_id=source_id, fuzzy=True, field=query["field"], value=query["fuzzy"], limit=limit, id_only=id_only, ) if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_term(**kwargs) # --------------------------------------------- # Match searching (phrases and such) # --------------------------------------------- elif QueryLanguage.query_is_match_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict( source_id=source_id, match=True, field=query["field"], value=query["match"], limit=limit, id_only=id_only, ) if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_term(**kwargs) # --------------------------------------------- # Association Search # --------------------------------------------- elif QueryLanguage.query_is_association_search(query): kwargs = dict(resource_id=query["association"], id_only=id_only) if query.get("depth"): kwargs["depth"] = query["depth"] return self.query_association(**kwargs) elif QueryLanguage.query_is_owner_search(query): kwargs = dict(resource_id=query["owner"], id_only=id_only) if query.get("depth"): kwargs["depth"] = query["depth"] return self.query_owner(**kwargs) # --------------------------------------------- # Range Search # --------------------------------------------- elif QueryLanguage.query_is_range_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict(source_id=source_id, field=query["field"], limit=limit, id_only=id_only) if get_safe(query, "range.from") is not None: kwargs["from_value"] = query["range"]["from"] if get_safe(query, "range.to") is not None: kwargs["to_value"] = query["range"]["to"] if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_range(**kwargs) # --------------------------------------------- # Time Search # --------------------------------------------- elif QueryLanguage.query_is_time_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict(source_id=source_id, field=query["field"], limit=limit, id_only=id_only) if get_safe(query, "time.from") is not None: kwargs["from_value"] = query["time"]["from"] if get_safe(query, "time.to") is not None: kwargs["to_value"] = query["time"]["to"] if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_time(**kwargs) # --------------------------------------------- # Time Bounds Search # --------------------------------------------- elif QueryLanguage.query_is_time_bounds_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict(source_id=source_id, field=query["field"], limit=limit, id_only=id_only) if get_safe(query, "time_bounds.from") is not None: kwargs["from_value"] = query["time_bounds"]["from"] if get_safe(query, "time_bounds.to") is not None: kwargs["to_value"] = query["time_bounds"]["to"] if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_time_bounds(**kwargs) # --------------------------------------------- # Vertical Bounds Search # --------------------------------------------- elif QueryLanguage.query_is_vertical_bounds_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict(source_id=source_id, field=query["field"], limit=limit, id_only=id_only) if get_safe(query, "vertical_bounds.from") is not None: kwargs["from_value"] = query["vertical_bounds"]["from"] if get_safe(query, "vertical_bounds.to") is not None: kwargs["to_value"] = query["vertical_bounds"]["to"] if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_vertical_bounds(**kwargs) # --------------------------------------------- # Collection Search # --------------------------------------------- elif QueryLanguage.query_is_collection_search(query): return self.query_collection(collection_id=query["collection"], id_only=id_only) # --------------------------------------------- # Geo Distance Search # --------------------------------------------- elif QueryLanguage.query_is_geo_distance_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict( source_id=source_id, field=query["field"], origin=[query["lon"], query["lat"]], distance=query["dist"], units=query["units"], id_only=id_only, ) if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_geo_distance(**kwargs) # --------------------------------------------- # Geo Bounding Box Search # --------------------------------------------- elif QueryLanguage.query_is_geo_bbox_search(query): source_id = self._match_query_sources(query["index"]) or query["index"] kwargs = dict( source_id=source_id, field=query["field"], top_left=query["top_left"], bottom_right=query["bottom_right"], id_only=id_only, ) if query.get("limit"): kwargs["limit"] = query["limit"] if query.get("order"): kwargs["order"] = query["order"] if query.get("offset"): kwargs["offset"] = query["offset"] return self.query_geo_bbox(**kwargs) # @todo: query for couch raise BadRequest("improper query: %s" % query)
def query_request(self, query=None, limit=0, id_only=False): validate_is_instance(query, dict, 'invalid query') #--------------------------------------------- # Term Search #--------------------------------------------- if QueryLanguage.query_is_term_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict(source_id=source_id, field=query['field'], value=query['value'], limit=limit, id_only=id_only) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_term(**kwargs) #--------------------------------------------- # Fuzzy searching (phrases and such) #--------------------------------------------- elif QueryLanguage.query_is_fuzzy_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict(source_id=source_id, fuzzy=True, field=query['field'], value=query['fuzzy'], limit=limit, id_only=id_only) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_term(**kwargs) #--------------------------------------------- # Association Search #--------------------------------------------- elif QueryLanguage.query_is_association_search(query): kwargs = dict(resource_id=query['association'], id_only=id_only) if query.get('depth'): kwargs['depth'] = query['depth'] return self.query_association(**kwargs) elif QueryLanguage.query_is_owner_search(query): kwargs = dict(resource_id=query['owner'], id_only=id_only) if query.get('depth'): kwargs['depth'] = query['depth'] return self.query_owner(**kwargs) #--------------------------------------------- # Range Search #--------------------------------------------- elif QueryLanguage.query_is_range_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict(source_id=source_id, field=query['field'], limit=limit, id_only=id_only) if get_safe(query, 'range.from') is not None: kwargs['from_value'] = query['range']['from'] if get_safe(query, 'range.to') is not None: kwargs['to_value'] = query['range']['to'] if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_range(**kwargs) #--------------------------------------------- # Time Search #--------------------------------------------- elif QueryLanguage.query_is_time_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict(source_id=source_id, field=query['field'], limit=limit, id_only=id_only) if get_safe(query, 'range.from') is not None: kwargs['from_value'] = query['range']['from'] if get_safe(query, 'range.to') is not None: kwargs['to_value'] = query['range']['to'] if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_time(**kwargs) #--------------------------------------------- # Collection Search #--------------------------------------------- elif QueryLanguage.query_is_collection_search(query): return self.query_collection(collection_id=query['collection'], id_only=id_only) #--------------------------------------------- # Geo Distance Search #--------------------------------------------- elif QueryLanguage.query_is_geo_distance_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict(source_id=source_id, field=query['field'], origin=[query['lon'], query['lat']], distance=query['dist'], units=query['units'], id_only=id_only) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_geo_distance(**kwargs) #--------------------------------------------- # Geo Bounding Box Search #--------------------------------------------- elif QueryLanguage.query_is_geo_bbox_search(query): source_id = self._match_query_sources( query['index']) or query['index'] kwargs = dict( source_id=source_id, field=query['field'], top_left=query['top_left'], bottom_right=query['bottom_right'], id_only=id_only, ) if query.get('limit'): kwargs['limit'] = query['limit'] if query.get('order'): kwargs['order'] = query['order'] if query.get('offset'): kwargs['offset'] = query['offset'] return self.query_geo_bbox(**kwargs) #@todo: query for couch raise BadRequest('improper query: %s' % query)
def parse(self, search_request=''): parser = QueryLanguage() query_request = parser.parse(search_request) return self.request(query_request)
def parse(self, search_request='', id_only=True): parser = QueryLanguage() query_request = parser.parse(search_request) return self.request(query_request, id_only=id_only)