Skip to content

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

@anatastor

Description

@anatastor

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

Activity

jules-ch

jules-ch commented on Aug 22, 2023

@jules-ch
Contributor

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

powersj

powersj commented on Aug 22, 2023

@powersj
Contributor

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

jules-ch

jules-ch commented on Aug 22, 2023

@jules-ch
Contributor

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

jules-ch

jules-ch commented on Aug 22, 2023

@jules-ch
Contributor

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

jules-ch

jules-ch commented on Aug 22, 2023

@jules-ch
Contributor

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.

powersj

powersj commented on Aug 22, 2023

@powersj
Contributor

I can submit a PR if needed.

Please do :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @powersj@anatastor@jules-ch

      Issue actions

        query_api.query_raw does not return str but urllib3.response.HTTPResponse object · Issue #569 · influxdata/influxdb-client-python