Beispiel #1
0
 def test_parse_to_string(self):
     encoder = JsonDatetimeSerializer()
     data = {'items': [{'date': datetime(2012, 10, 24)}]}
     assert encoder.datetime_to_string(data) == {
         'items': [{
             'date': "2012-10-24T00:00:00"
         }]
     }
Beispiel #2
0
class ElasticSearch(MetadataStorage):
    def __init__(self, config, http_client=AsyncHTTPClient()):
        self._http_client = http_client
        self._elastic_search_urls = Urls(config=config)
        self._elastic_search_parser = Parser()
        self._json_encoder = JsonDatetimeSerializer(camel_case_transform=False)

    @gen.engine
    def search(self, callback, **search_arguments):
        elastic_search_request = self._build_search_request(**search_arguments)
        elastic_search_response = yield gen.Task(self._http_client.fetch, elastic_search_request)
        images_dict = self._elastic_search_parser.parse_images_from_search(elastic_search_response.body)
        callback(images_dict)

    @gen.engine
    def fetch_meta_data(self, callback, image_id):
        url = self._elastic_search_urls.document_url(Urls.IMAGE_TYPE, image_id)
        elastic_search_response = yield gen.Task(self._http_client.fetch, url, method="GET")
        image_dict = self._elastic_search_parser.parse_image_from_document(elastic_search_response.body)
        callback(image_dict)

    @gen.engine
    def store_meta_data(self, callback, image_id, **meta_data):
        url = self._elastic_search_urls.document_url(Urls.IMAGE_TYPE, image_id)
        yield gen.Task(self._http_client.fetch, url, method="PUT", body=self._json_encoder.encode(meta_data))
        callback()

    def _build_search_request(self, **search_arguments):
        url = self._elastic_search_urls.search_url(Urls.IMAGE_TYPE)

        search_request_body = SearchRequestBody()
        search_request_body.from_index((search_arguments.get("page") - 1) * search_arguments.get("page_size"))
        search_request_body.size(search_arguments.get("page_size"))
        if search_arguments.get("q"):
            search_request_body.query_string(search_arguments.get("q"))
        if search_arguments.get("created_date_from"):
            search_request_body.range("created_date").gte(search_arguments.get("created_date_from").isoformat())
        if search_arguments.get("created_date_to"):
            search_request_body.range("created_date").lte(search_arguments.get("created_date_to").isoformat())
        if search_arguments.get("event_date_from"):
            search_request_body.range("event_date").gte(search_arguments.get("event_date_from").isoformat())
        if search_arguments.get("event_date_to"):
            search_request_body.range("event_date").lte(search_arguments.get("event_date_to").isoformat())
        search_request_body.sort([{"_score": "desc"}, {"created_date": {"order": "desc", "ignore_unmapped": True}}])

        return HTTPRequest(url, body=search_request_body.as_json(), allow_nonstandard_methods=True)
Beispiel #3
0
 def __init__(self, config, http_client=AsyncHTTPClient()):
     self._http_client = http_client
     self._elastic_search_urls = Urls(config=config)
     self._elastic_search_parser = Parser()
     self._json_encoder = JsonDatetimeSerializer(camel_case_transform=False)
Beispiel #4
0
 def test_parse_to_string(self):
     encoder = JsonDatetimeSerializer()
     data = {'items': [{'date': datetime(2012, 10, 24)}]}
     assert encoder.datetime_to_string(data) == {'items': [{'date': "2012-10-24T00:00:00"}]}
Beispiel #5
0
 def __init__(self, config, http_client=AsyncHTTPClient()):
     self._http_client = http_client
     self._elastic_search_urls = Urls(config=config)
     self._elastic_search_parser = Parser()
     self._json_encoder = JsonDatetimeSerializer(camel_case_transform=False)
Beispiel #6
0
class ElasticSearch(MetadataStorage):
    def __init__(self, config, http_client=AsyncHTTPClient()):
        self._http_client = http_client
        self._elastic_search_urls = Urls(config=config)
        self._elastic_search_parser = Parser()
        self._json_encoder = JsonDatetimeSerializer(camel_case_transform=False)

    @gen.engine
    def search(self, callback, **search_arguments):
        elastic_search_request = self._build_search_request(**search_arguments)
        elastic_search_response = yield gen.Task(self._http_client.fetch,
                                                 elastic_search_request)
        images_dict = self._elastic_search_parser.parse_images_from_search(
            elastic_search_response.body)
        callback(images_dict)

    @gen.engine
    def fetch_meta_data(self, callback, image_id):
        url = self._elastic_search_urls.document_url(Urls.IMAGE_TYPE, image_id)
        elastic_search_response = yield gen.Task(self._http_client.fetch,
                                                 url,
                                                 method='GET')
        image_dict = self._elastic_search_parser.parse_image_from_document(
            elastic_search_response.body)
        callback(image_dict)

    @gen.engine
    def store_meta_data(self, callback, image_id, **meta_data):
        url = self._elastic_search_urls.document_url(Urls.IMAGE_TYPE, image_id)
        yield gen.Task(self._http_client.fetch,
                       url,
                       method='PUT',
                       body=self._json_encoder.encode(meta_data))
        callback()

    def _build_search_request(self, **search_arguments):
        url = self._elastic_search_urls.search_url(Urls.IMAGE_TYPE)

        search_request_body = SearchRequestBody()
        search_request_body.from_index((search_arguments.get('page') - 1) *
                                       search_arguments.get('page_size'))
        search_request_body.size(search_arguments.get('page_size'))
        if search_arguments.get('q'):
            search_request_body.query_string(search_arguments.get('q'))
        if search_arguments.get('created_date_from'):
            search_request_body.range('created_date').gte(
                search_arguments.get('created_date_from').isoformat())
        if search_arguments.get('created_date_to'):
            search_request_body.range('created_date').lte(
                search_arguments.get('created_date_to').isoformat())
        if search_arguments.get('event_date_from'):
            search_request_body.range('event_date').gte(
                search_arguments.get('event_date_from').isoformat())
        if search_arguments.get('event_date_to'):
            search_request_body.range('event_date').lte(
                search_arguments.get('event_date_to').isoformat())
        search_request_body.sort([{
            '_score': 'desc'
        }, {
            'created_date': {
                'order': 'desc',
                'ignore_unmapped': True
            }
        }])

        return HTTPRequest(url,
                           body=search_request_body.as_json(),
                           allow_nonstandard_methods=True)