def get_item(self, **kw): _raise_on_empty = kw.pop('_raise_on_empty', True) params = dict( index=self.index_name, doc_type=self.doc_type ) params.update(kw) not_found_msg = "'{}({})' resource not found".format( self.doc_type, params) try: data = self.api.get_source(**params) except IndexNotFoundException: if _raise_on_empty: raise JHTTPNotFound("{} (Index does not exist)".format( not_found_msg, self.doc_type, params)) data = {} except JHTTPNotFound: data = {} if not data: if _raise_on_empty: raise JHTTPNotFound(not_found_msg) else: log.debug(not_found_msg) if '_type' not in data: data['_type'] = self.doc_type return dict2proxy(data, self.proxy)
def get_collection(self, **params): _raise_on_empty = params.pop('_raise_on_empty', False) _params = self.build_search_params(params) if '_count' in params: return self.do_count(_params) fields = _params.pop('fields', '') if fields: fields_params = process_fields_param(fields) _params.update(fields_params) documents = _ESDocs() documents._nefertari_meta = dict( start=_params.get('from_', 0), fields=fields) try: if ("size" in _params and _params["size"] > 10000) or ("limit" in _params and _params["limit"] > 10000): _params["scroll"] = "1m" data = self.api.search(**_params) else: data = self.api.search(**_params) except IndexNotFoundException: if _raise_on_empty: raise JHTTPNotFound( '{}({}) resource not found (Index does not exist)'.format( self.doc_type, params)) documents._nefertari_meta.update( total=0, took=0) return documents for found_doc in data['hits']['hits']: output_doc = found_doc['_source'] output_doc['_score'] = found_doc['_score'] output_doc['_type'] = found_doc['_type'] documents.append(dict2proxy(output_doc, ES.document_proxy.get_document_proxies_by_type(found_doc['_type']))) documents._nefertari_meta.update( total=data['hits']['total'], took=data['took'], ) if not documents: msg = "%s(%s) resource not found" % (self.doc_type, params) if _raise_on_empty: raise JHTTPNotFound(msg) else: log.debug(msg) return documents
def get_by_ids(self, ids, **params): if not ids: return _ESDocs() _raise_on_empty = params.pop('_raise_on_empty', False) fields = params.pop('_fields', []) _limit = params.pop('_limit', len(ids)) _page = params.pop('_page', None) _start = params.pop('_start', None) _start, _limit = process_limit(_start, _page, _limit) docs = [] for _id in ids: docs.append( dict( _index=self.index_name, _type=self.src2type(_id['_type']), _id=_id['_id'] ) ) params = dict( body=dict(docs=docs) ) if fields: fields_params = process_fields_param(fields) params.update(fields_params) documents = _ESDocs() documents._nefertari_meta = dict( start=_start, fields=fields, ) try: data = self.api.mget(**params) except IndexNotFoundException: if _raise_on_empty: raise JHTTPNotFound( '{}({}) resource not found (Index does not exist)'.format( self.doc_type, params)) documents._nefertari_meta.update(total=0) return documents for found_doc in data['docs']: try: output_doc = found_doc['_source'] output_doc['_type'] = found_doc['_type'] except KeyError: msg = "ES: '%s(%s)' resource not found" % ( found_doc['_type'], found_doc['_id']) if _raise_on_empty: raise JHTTPNotFound(msg) else: log.error(msg) continue documents.append(dict2proxy(dictset(output_doc), ES.document_proxy.get_document_proxies_by_type(found_doc['_type']))) documents._nefertari_meta.update( total=len(documents), ) return documents