datadotworld / data.world-py

Python package for data.world
https://data.world/integrations/python
Apache License 2.0
102 stars 28 forks source link

Bug in SQL query interface of RestApiClient #135

Open hmlpinto opened 2 years ago

hmlpinto commented 2 years ago

When interacting with the sql method of the RestApiClient, the function leverages the method sql_post from QueriesAPI.

This latter method does not leverage the query argument passed by the function.

The method from QueriesAPI that leverages the query argument directly is the sql_get

At the moment, I'm forced to override the call from sql_post to sql_get in method sql of the RestApiClient for the method to work.


def override_sql(self, dataset_key, query, desired_mimetype='application/json',
        **kwargs):
    """Executes SQL queries against a dataset via POST

    :param dataset_key: Dataset identifier, in the form of owner/id
    :type dataset_key: str
    :param query: SQL query
    :type query: str
    :param include_table_schema: Flags indicating to include table schema
        in the response
    :type include_table_schema: bool
    :returns: file object that can be used in file parsers and
        data handling modules.
    :rtype: file-like object
    :raises RestApiException: If a server error occurs

    Examples
    --------
    >>> import datadotworld as dw
    >>> api_client = dw.api_client()
    >>> api_client.sql('username/test-dataset', 'query') # doctest: +SKIP
    """
    api_client = self._build_api_client(
        default_mimetype_header_accept=desired_mimetype)
    queries_api = kwargs.get('queries_api_mock',
                                 _swagger.QueriesApi(api_client))
    owner_id, dataset_id = parse_dataset_key(dataset_key)
    try:
        response = queries_api.sql_get(
            owner_id, dataset_id, query, _preload_content=False, **kwargs)
        return six.BytesIO(response.data)
    except _swagger.rest.ApiException as e:
        raise RestApiError(cause=e)

RestApiClient.sql = override_sql

Should I use a different method to leverage the sql query functionality?