def _run_query(self, query, *fields, **kwargs): read_args = add_defaults(kwargs.get(self._READ_ARGS_LABEL, {}), self._default_read_args) if fields: read_args["_source"] = Helpers.concat(fields, ",") try: records = self.data_source.connection.search( index=self.data_source.index, doc_type=self._get_table_name(), body=query, params=read_args ) for record in records["hits"]["hits"]: yield self._record_to_to(record) except ElasticsearchException as e: if e.__class__ in self._EXCEPTION_IGNORE_ON_QUERY: self._log_exception(*e.args) raise
def get_by_pk(self, pk, *fields, **kwargs): read_args = add_defaults(kwargs.get(self._READ_ARGS_LABEL, {}), self._default_read_args) if fields: read_args["_source"] = Helpers.concat(fields, ",") try: record = self.data_source.connection.get( index=self.data_source.index, doc_type=self._get_table_name(), id=pk, params=read_args ) if record is not None: return self._record_to_to(record) except ElasticsearchException as e: if e.__class__ in self._EXCEPTION_IGNORE_ON_READ: self._log_exception(*e.args) return None raise
def get_by_pks(self, pks, *fields, **kwargs): read_args = add_defaults(kwargs.get(self._READ_ARGS_LABEL, {}), self._default_read_args) if fields: read_args["_source"] = Helpers.concat(fields, ",") try: records = self.data_source.connection.mget( index=self.data_source.index, doc_type=self._get_table_name(), body=dict(ids=list(pks)), params=read_args ) return {record["_id"]: self._record_to_to(record) if record["found"] else None for record in records["docs"]} except ElasticsearchException as e: if e.__class__ in self._EXCEPTION_IGNORE_ON_READ: self._log_exception(*e.args) return None raise
def pk(self): return Helpers.concat([getattr(self, name) for name in self._pks])