KEMBAR78
`write_file(file='<JSON_FILE>') fails if Polars isn't installed · Issue #90 · InfluxCommunity/influxdb3-python · GitHub
Skip to content

`write_file(file='<JSON_FILE>') fails if Polars isn't installed #90

@jstirnaman

Description

@jstirnaman

Specifications

  • Client Version: 0.5.0 (latest tag)
  • InfluxDB Version: v3 Cloud Dedicated
  • Platform: Docker golang image

Call client.write_file() and pass a JSON or CSV file.

Code sample to reproduce problem

from influxdb_client_3 import(InfluxDBClient3, write_client_options,
                              WritePrecision, WriteOptions, InfluxDBError)

# Define the result object
result = {
    'config': None,
    'status': None,
    'data': None,
    'error': None
}

# Define callbacks for write responses
def success_callback(self, data: str):
    result['config'] = self
    result['status'] = 'success'
    result['data'] = data

def error_callback(self, data: str, exception: InfluxDBError):
    result['config'] = self
    result['status'] = 'error'
    result['data'] = data
    result['error'] = exception

def retry_callback(self, data: str, exception: InfluxDBError):
    result['config'] = self
    result['status'] = 'retry_error'
    result['data'] = data
    result['error'] = exception

write_options = WriteOptions(batch_size=500,
                            flush_interval=10_000,
                            jitter_interval=2_000,
                            retry_interval=5_000,
                            max_retries=5,
                            max_retry_delay=30_000,
                            exponential_base=2)


wco = write_client_options(success_callback=success_callback,
                          error_callback=error_callback,
                          retry_callback=retry_callback,
                          write_options=write_options)

with InfluxDBClient3(host=f"{{< influxdb/host >}}",
                         database=f"DATABASE_NAME",
                         token=f"DATABASE_TOKEN",
                      write_client_options=wco) as client:

  client.write_file(file='./data/home.csv', timestamp_column='time',
                    tag_columns=["room"], write_precision='s')

  assert result['status'] == "success", f"Expected CSV {result['error']} to be success"

  client.write_file(file='./data/home.json', timestamp_column='time',
                    tag_columns=["room"], write_precision='s')

  assert result['status'] == "success", f"Expected JSON {result['error']} to be success"

See below for more examples/details.

Expected behavior

I expect the batch to be written and to not require polars for writing CSV or JSON.

Actual behavior

It throws the following error:

`polars_frame` requires polars which couldn't be imported due: No module named 'polars'

Additional info

See the following for dependency versions and example pytest failures:

 ✔ Container docs-v2-tests  Created                                                                                                                                                                                            0.0s 
Attaching to docs-v2-tests
docs-v2-tests  | PRETEST: substituting values in ./content/influxdb/cloud-dedicated/reference/client-libraries/v3/python.md
docs-v2-tests  | Package              Version
docs-v2-tests  | -------------------- -----------
docs-v2-tests  | annotated-types      0.7.0
docs-v2-tests  | anyio                4.3.0
docs-v2-tests  | certifi              2024.2.2
docs-v2-tests  | coverage             7.5.1
docs-v2-tests  | distro               1.9.0
docs-v2-tests  | h11                  0.14.0
docs-v2-tests  | httpcore             1.0.5
docs-v2-tests  | httpx                0.27.0
docs-v2-tests  | idna                 3.7
docs-v2-tests  | influxdb3-python     0.0.0
docs-v2-tests  | influxdb3-python-cli 0.0.0
docs-v2-tests  | iniconfig            2.0.0
docs-v2-tests  | numpy                1.26.4
docs-v2-tests  | openai               1.30.2
docs-v2-tests  | packaging            24.0
docs-v2-tests  | pandas               2.2.2
docs-v2-tests  | pip                  23.0.1
docs-v2-tests  | pluggy               1.5.0
docs-v2-tests  | prompt-toolkit       3.0.43
docs-v2-tests  | pyarrow              16.1.0
docs-v2-tests  | pydantic             2.7.1
docs-v2-tests  | pydantic_core        2.18.2
docs-v2-tests  | Pygments             2.18.0
docs-v2-tests  | pytest               8.2.1
docs-v2-tests  | pytest_codeblocks    0.17.0
docs-v2-tests  | pytest-cov           5.0.0
docs-v2-tests  | pytest-dotenv        0.5.2
docs-v2-tests  | python-dateutil      2.9.0.post0
docs-v2-tests  | python-dotenv        1.0.1
docs-v2-tests  | pytz                 2024.1
docs-v2-tests  | reactivex            4.0.4
docs-v2-tests  | setuptools           66.1.1
docs-v2-tests  | six                  1.16.0
docs-v2-tests  | sniffio              1.3.1
docs-v2-tests  | tabulate             0.9.0
docs-v2-tests  | tqdm                 4.66.4
docs-v2-tests  | typing_extensions    4.11.0
docs-v2-tests  | tzdata               2024.1
docs-v2-tests  | urllib3              2.2.1
docs-v2-tests  | wcwidth              0.2.13
docs-v2-tests  | Running content/influxdb/cloud-dedicated tests...
docs-v2-tests  | ============================= test session starts ==============================
docs-v2-tests  | platform linux -- Python 3.11.2, pytest-8.2.1, pluggy-1.5.0
docs-v2-tests  | rootdir: /usr/src/app/test
docs-v2-tests  | configfile: pytest.ini
docs-v2-tests  | plugins: anyio-4.3.0, cov-5.0.0, dotenv-0.5.2, pytest_codeblocks-0.17.0
docs-v2-tests  | collected 23 items
docs-v2-tests  | 
docs-v2-tests  | content/influxdb/cloud-dedicated/reference/client-libraries/v3/python.md F [  4%]
docs-v2-tests  | .....F...F.........ss.                                                   [100%]
docs-v2-tests  | 
docs-v2-tests  | =================================== FAILURES ===================================
docs-v2-tests  | _______________________________ code block check _______________________________
docs-v2-tests  | line 18, line 18:
docs-v2-tests  | ```
docs-v2-tests  | import os
docs-v2-tests  | from influxdb_client_3 import(InfluxDBClient3,
docs-v2-tests  |                               WriteOptions,
docs-v2-tests  |                               write_client_options)
docs-v2-tests  | # Instantiate batch writing options for the client
docs-v2-tests  | write_options = WriteOptions()
docs-v2-tests  | wco = write_client_options(write_options=write_options)
docs-v2-tests  | # Instantiate an InfluxDB v3 client
docs-v2-tests  | with InfluxDBClient3(host=os.getenv("INFLUX_HOSTNAME"),
docs-v2-tests  |                       database=os.getenv("INFLUX_DATABASE"),
docs-v2-tests  |                       token=os.getenv("INFLUX_TOKEN"),
docs-v2-tests  |                       write_client_options=wco) as client:
docs-v2-tests  |   # Write data in batches
docs-v2-tests  |   client.write_file(file='./data/home.csv', timestamp_column='time',
docs-v2-tests  |                     tag_columns=["room"])
docs-v2-tests  |   # Execute a query and retrieve data formatted as a PyArrow Table
docs-v2-tests  |   table = client.query(
docs-v2-tests  |     '''SELECT *
docs-v2-tests  |        FROM home
docs-v2-tests  |        WHERE time >= now() - INTERVAL '90 days'
docs-v2-tests  |        ORDER BY time''')
docs-v2-tests  | ```
docs-v2-tests  | 
docs-v2-tests  | `polars_frame` requires polars which couldn't be imported due: No module named 'polars'
docs-v2-tests  | _______________________________ code block check _______________________________
docs-v2-tests  | line 279, line 279:
docs-v2-tests  | ```
docs-v2-tests  | import os
docs-v2-tests  | from influxdb_client_3 import(InfluxDBClient3,
docs-v2-tests  |                               write_client_options,
docs-v2-tests  |                               WriteOptions,
docs-v2-tests  |                               InfluxDBError)
docs-v2-tests  | 
docs-v2-tests  | status = None
docs-v2-tests  | 
docs-v2-tests  | # Define callbacks for write responses
docs-v2-tests  | def success(self, data: str):
docs-v2-tests  |     status = f"Success writing batch: data: {data}"
docs-v2-tests  | 
docs-v2-tests  | def error(self, data: str, err: InfluxDBError):
docs-v2-tests  |     status = f"Error writing batch: config: {self}, data: {data}, error: {err}"
docs-v2-tests  | 
docs-v2-tests  | def retry(self, data: str, err: InfluxDBError):
docs-v2-tests  |     status = f"Retry error writing batch: config: {self}, data: {data}, error: {err}"
docs-v2-tests  | 
docs-v2-tests  | # Instantiate WriteOptions for batching
docs-v2-tests  | write_options = WriteOptions()
docs-v2-tests  | wco = write_client_options(success_callback=success,
docs-v2-tests  |                             error_callback=error,
docs-v2-tests  |                             retry_callback=retry,
docs-v2-tests  |                             write_options=write_options)
docs-v2-tests  | 
docs-v2-tests  | # Use the with...as statement to ensure the file is properly closed and resources
docs-v2-tests  | # are released.
docs-v2-tests  | with InfluxDBClient3(host=os.getenv("INFLUX_HOSTNAME"),
docs-v2-tests  |                      database=os.getenv("INFLUX_DATABASE"),
docs-v2-tests  |                      token=os.getenv("INFLUX_TOKEN"),
docs-v2-tests  |                      write_client_options=wco) as client:
docs-v2-tests  | 
docs-v2-tests  |     client.write_file(file='./data/home.csv',
docs-v2-tests  |       timestamp_column='time', tag_columns=["room"], write_precision='s')
docs-v2-tests  |     
docs-v2-tests  |     assert status.startsWith('Success'), f"Expected {status} to be success"
docs-v2-tests  | ```
docs-v2-tests  | 
docs-v2-tests  | `polars_frame` requires polars which couldn't be imported due: No module named 'polars'
docs-v2-tests  | _______________________________ code block check _______________________________
docs-v2-tests  | line 536, line 536:
docs-v2-tests  | ```
docs-v2-tests  | import os
docs-v2-tests  | from influxdb_client_3 import(InfluxDBClient3, write_client_options,
docs-v2-tests  |                               WritePrecision, WriteOptions, InfluxDBError)
docs-v2-tests  | 
docs-v2-tests  | # Define the result object
docs-v2-tests  | result = {
docs-v2-tests  |     'config': None,
docs-v2-tests  |     'status': None,
docs-v2-tests  |     'data': None,
docs-v2-tests  |     'error': None
docs-v2-tests  | }
docs-v2-tests  | 
docs-v2-tests  | # Define callbacks for write responses
docs-v2-tests  | def success_callback(self, data: str):
docs-v2-tests  |     result['config'] = self
docs-v2-tests  |     result['status'] = 'success'
docs-v2-tests  |     result['data'] = data
docs-v2-tests  | 
docs-v2-tests  | def error_callback(self, data: str, exception: InfluxDBError):
docs-v2-tests  |     result['config'] = self
docs-v2-tests  |     result['status'] = 'error'
docs-v2-tests  |     result['data'] = data
docs-v2-tests  |     result['error'] = exception
docs-v2-tests  | 
docs-v2-tests  | def retry_callback(self, data: str, exception: InfluxDBError):
docs-v2-tests  |     result['config'] = self
docs-v2-tests  |     result['status'] = 'retry_error'
docs-v2-tests  |     result['data'] = data
docs-v2-tests  |     result['error'] = exception
docs-v2-tests  | 
docs-v2-tests  | write_options = WriteOptions(batch_size=500,
docs-v2-tests  |                             flush_interval=10_000,
docs-v2-tests  |                             jitter_interval=2_000,
docs-v2-tests  |                             retry_interval=5_000,
docs-v2-tests  |                             max_retries=5,
docs-v2-tests  |                             max_retry_delay=30_000,
docs-v2-tests  |                             exponential_base=2)
docs-v2-tests  | 
docs-v2-tests  | 
docs-v2-tests  | wco = write_client_options(success_callback=success_callback,
docs-v2-tests  |                           error_callback=error_callback,
docs-v2-tests  |                           retry_callback=retry_callback,
docs-v2-tests  |                           write_options=write_options)
docs-v2-tests  | 
docs-v2-tests  | with InfluxDBClient3(host=os.getenv("INFLUX_HOSTNAME"),
docs-v2-tests  |                          database=os.getenv("INFLUX_DATABASE"),
docs-v2-tests  |                          token=os.getenv("INFLUX_TOKEN"),
docs-v2-tests  |                       write_client_options=wco) as client:
docs-v2-tests  | 
docs-v2-tests  |   client.write_file(file='./data/home.csv', timestamp_column='time',
docs-v2-tests  |                     tag_columns=["room"], write_precision='s')
docs-v2-tests  | 
docs-v2-tests  |   assert result['status'] == "success", f"Expected CSV {result['error']} to be success"
docs-v2-tests  | 
docs-v2-tests  |   client.write_file(file='./data/home.json', timestamp_column='time',
docs-v2-tests  |                     tag_columns=["room"], write_precision='s')
docs-v2-tests  | 
docs-v2-tests  |   assert result['status'] == "success", f"Expected JSON {result['error']} to be success"
docs-v2-tests  | ```
docs-v2-tests  | 
docs-v2-tests  | `polars_frame` requires polars which couldn't be imported due: No module named 'polars'
docs-v2-tests  | =========================== short test summary info ============================
docs-v2-tests  | FAILED content/influxdb/cloud-dedicated/reference/client-libraries/v3/python.md::line 18
docs-v2-tests  | FAILED content/influxdb/cloud-dedicated/reference/client-libraries/v3/python.md::line 279
docs-v2-tests  | FAILED content/influxdb/cloud-dedicated/reference/client-libraries/v3/python.md::line 536
docs-v2-tests  | =================== 3 failed, 18 passed, 2 skipped in 3.69s ====================

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions