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']
         )
Example #4
0
 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=''):
     parser = QueryLanguage()
     query_request = parser.parse(search_request)
     return self.request(query_request)
Example #12
0
 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)
 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