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" }] }
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)
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)
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"}]}
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)