Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
 def pk(self):
     return Helpers.concat([getattr(self, name) for name in self._pks])