influxdb-client-python icon indicating copy to clipboard operation
influxdb-client-python copied to clipboard

query_api.query_raw does not return str but urllib3.response.HTTPResponse object

Open anatastor opened this issue 2 years ago • 6 comments

Hi,

I just learned that the query_api.query_raw () does not return a str as written in the documentation bus instead an urllib3.response.HTTPResponse object, from which the resulting str can be fetched. I would appreciate either updating the documentation or the function to actually returning a str

anatastor avatar Mar 29 '23 05:03 anatastor

I've encountered this only on the sync client, the async client returns str as per the docs.

jules-ch avatar Aug 22 '23 12:08 jules-ch

@ivankudibal - is this just a doc update for the sync client?

powersj avatar Aug 22 '23 14:08 powersj

Per the doc both sync and async should return a str representation of the CSV from the response

jules-ch avatar Aug 22 '23 15:08 jules-ch

Execute synchronous Flux query and return result as raw unprocessed result as a str.

jules-ch avatar Aug 22 '23 15:08 jules-ch

the sync QueryAPI:


    def query_raw(self, query: str, org=None, dialect=_BaseQueryApi.default_dialect, params: dict = None):
        """
        Execute synchronous Flux query and return result as raw unprocessed result as a str.

        :param query: a Flux query
        :param str, Organization org: specifies the organization for executing the query;
                                      Take the ``ID``, ``Name`` or ``Organization``.
                                      If not specified the default value from ``InfluxDBClient.org`` is used.
        :param dialect: csv dialect format
        :param params: bind parameters
        :return: str
        """
        org = self._org_param(org)
        result = self._query_api.post_query(org=org, query=self._create_query(query, dialect, params), async_req=False,
                                            _preload_content=False)

        return result

The Async one:


    async def query_raw(self, query: str, org=None, dialect=_BaseQueryApi.default_dialect, params: dict = None):
        """
        Execute asynchronous Flux query and return result as raw unprocessed result as a str.

        :param query: a Flux query
        :param str, Organization org: specifies the organization for executing the query;
                                      Take the ``ID``, ``Name`` or ``Organization``.
                                      If not specified the default value from ``InfluxDBClientAsync.org`` is used.
        :param dialect: csv dialect format
        :param params: bind parameters
        :return: :class:`~str`
        """
        org = self._org_param(org)
        result = await self._post_query(org=org, query=self._create_query(query, dialect, params))
        raw_bytes = await result.read()
        return raw_bytes.decode(_UTF_8_encoding)

In the sync one, the response should also be read and decoded as UTF8 just like the async version. I can submit a PR if needed.

jules-ch avatar Aug 22 '23 17:08 jules-ch

I can submit a PR if needed.

Please do :)

powersj avatar Aug 22 '23 17:08 powersj