feat: Add CLI#208
Conversation
bednar
left a comment
There was a problem hiding this comment.
@TheTrueAI thanks for the PR. There is already an existing CLI tool: https://docs.influxdata.com/influxdb3/core/reference/cli/influxdb3/. What’s the reason for creating a new one in the Python v3 client?
|
Good point — the official influxdb3 query CLI does cover the same query functionality. My motivation was zero-install in Python environments: Happy to scope this down or close if you feel the overlap isn't justified. |
Thanks for explanation, every PR is welcome so we will be happy to review your code. Thanks again for your contribution. |
There was a problem hiding this comment.
Pull request overview
Introduces a first-party, scriptable influx3 query CLI for executing SQL/InfluxQL queries against InfluxDB 3, and adds a small Windows-focused TLS root cert compatibility fix for Flight query PEM loading.
Changes:
- Add
influx3console script +python -m influxdb_client_3module entrypoint for query workflows. - Implement query execution + output formatting (JSON/JSONL/CSV/pretty), config/env precedence, and basic error handling.
- Normalize PEM certificate line endings when reading Flight query root certs.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
influxdb_client_3/cli.py |
New CLI implementation for influx3 query including formatting, env precedence, and output handling. |
influxdb_client_3/__main__.py |
Enables python -m influxdb_client_3 CLI execution. |
setup.py |
Adds console_scripts entry point for influx3. |
tests/test_cli.py |
Adds unit tests for CLI parsing and core query execution paths. |
influxdb_client_3/query/query_api.py |
Normalizes PEM line endings when reading root certificates. |
README.md |
Documents CLI usage, formats, and configuration precedence. |
CHANGELOG.md |
Adds feature + bug-fix entries for the CLI and PEM normalization. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
4a4b595 to
fde7f67
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #208 +/- ##
==========================================
+ Coverage 75.17% 76.05% +0.87%
==========================================
Files 35 37 +2
Lines 2417 2543 +126
==========================================
+ Hits 1817 1934 +117
- Misses 600 609 +9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
What's the goal of the code coverage? Should I increase it? |
|
Patch coverage check passed. |
There was a problem hiding this comment.
Hi @TheTrueAI,
Thank you for this contribution. It looks very complete.
While testing it out I ran into a minor problem when querying data with nanosecond time precision. PyArrow needs pandas installed in order for this to work.
$ influx3 query "SELECT * FROM testnanosec"
Traceback (most recent call last):
File "/home/karl/bonitoo/prjs/github.com/TheTrueAI/influxdb3-python/venv/bin/influx3", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/karl/bonitoo/prjs/github.com/TheTrueAI/influxdb3-python/venv/lib/python3.12/site-packages/influxdb_client_3/cli.py", line 184, in main
return args.func(args, sys.stdout, sys.stderr)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/karl/bonitoo/prjs/github.com/TheTrueAI/influxdb3-python/venv/lib/python3.12/site-packages/influxdb_client_3/cli.py", line 169, in _run_query
payload = _ensure_trailing_nl(_format_table(table, args.output_format))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/karl/bonitoo/prjs/github.com/TheTrueAI/influxdb3-python/venv/lib/python3.12/site-packages/influxdb_client_3/cli.py", line 85, in _format_table
rows = table.to_pylist()
^^^^^^^^^^^^^^^^^
File "pyarrow/table.pxi", line 2337, in pyarrow.lib._Tabular.to_pylist
File "pyarrow/table.pxi", line 2300, in pyarrow.lib._Tabular.to_pydict
File "pyarrow/table.pxi", line 1384, in pyarrow.lib.ChunkedArray.to_pylist
File "pyarrow/array.pxi", line 1847, in pyarrow.lib.Array.to_pylist
File "pyarrow/scalar.pxi", line 829, in pyarrow.lib.TimestampScalar.as_py
File "pyarrow/scalar.pxi", line 719, in pyarrow.lib._datetime_from_int
ValueError: Nanosecond resolution temporal type 1777981256454646723 is not safely convertible to microseconds to convert to datetime.datetime. Install pandas to return as Timestamp with nanosecond support or access the .value attribute.
Pandas is not distributed with the Influxdb3-python client and needs to be installed separately. I've already made a mention of this in a documentation update merged today. It might be worth repeating as a reminder in the CLI section of README.md to help first time users avoid unpleasant surprises.
I have a small question regarding the environment variable overrides for the CLI client, which might be shorter to be more memorable.
Add a new query CLI to support quick read/debug workflows from terminal and AI agents. - add influx3 query with json, jsonl, csv, and pretty output - add module execution path via python -m influxdb_client_3 - wire console entry point in setup - add CLI tests
ns timestamps are now truncated to µs. This enables querying DBs with ns precision. If ns precision is needed as output, the direct Python client is the better option. Co-authored-by: Copilot <copilot@github.com>
Good find! Now I added a commit, that should fix that problem. Please try again |
Proposed Changes
Developers and AI tooling need a simple, scriptable query command for fast feedback during development. Existing community Python CLI seems unmaintained and not aligned with current behavior. So this PR introduces the following:
Checklist