scylladb / python-driver

ScyllaDB Python Driver, originally DataStax Python Driver for Apache Cassandra
https://python-driver.docs.scylladb.com
Apache License 2.0
70 stars 42 forks source link

cassandra/query: use timezone specific API to avoid deprecated warning #337

Closed tchaikov closed 2 months ago

tchaikov commented 2 months ago

before this change, when testing with cqlsh using some dtest based tests, we have failures like:

------------------------------------------------------------------------------------------------- Captured log call --------------------------------------------------------------------------------------------------
15:10:02,963 ccm             DEBUG cluster.py     :754  | node1: (EE) /home/kefu/dev/scylladb/tools/cqlsh/bin/cqlsh.py:1063: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future vers
ion. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
15:10:02,963 cqlsh_tests.cqlsh_tests ERROR cqlsh_tests.py :534  | /home/kefu/dev/scylladb/tools/cqlsh/bin/cqlsh.py:1063: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version.
 Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
----------------------------------------------------------------------------------------------- Captured log teardown ------------------------------------------------------------------------------------------------                        15:10:05,989 dtest_setup     DEBUG dtest_setup.py :629  | exclude_errors: []
15:10:05,993 dtest_setup     DEBUG dtest_setup.py :718  | removing ccm cluster test at: /home/kefu/.dtest/dtest-kguqevx3
15:10:06,002 dtest_setup     DEBUG dtest_setup.py :721  | clearing ssl stores from [/home/kefu/.dtest/dtest-kguqevx3] directory
15:10:06,002 dtest_setup     DEBUG dtest_setup.py :85   | Freeing cluster ID 20: link /home/kefu/.dtest/20
================================================================================================== warnings summary ==================================================================================================                        <frozen importlib._bootstrap>:488
  <frozen importlib._bootstrap>:488: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtim
estamp(timestamp, datetime.UTC).

cqlsh_tests/cqlsh_tests.py::TestCqlshWithSSL::test_tracing[require_client_auth=true]
cqlsh_tests/cqlsh_tests.py::TestCqlshWithSSL::test_tracing[require_client_auth=false]
  /home/kefu/.local/lib/python3.12/site-packages/pytest_elk_reporter.py:281: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in
UTC: datetime.datetime.now(datetime.UTC).
    timestamp=datetime.datetime.utcnow().isoformat(),

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================================================================== short test summary info ===============================================================================================
FAILED cqlsh_tests/cqlsh_tests.py::TestCqlshWithSSL::test_tracing[require_client_auth=true] - AssertionError: Failed to execute cqlsh
FAILED cqlsh_tests/cqlsh_tests.py::TestCqlshWithSSL::test_tracing[require_client_auth=false]
- AssertionError: Failed to execute cqlsh

this happens because the warnings are printed to stderr, and we take non-empty output in stderr as an indication of test failure.

in this change, we replace the deprecated API with timezone-aware API, to avoid this warning.

and the tests passed.

tchaikov commented 2 months ago

Makes sense. Could you also send this PR to upstream, to decrease conflicts amount in the future?

sure thing. Will do the next morning.

fruch commented 2 months ago

@Lorak-mmk

We should look into failing the unittes on warnings

That would help us catching/attending to those sooner

tchaikov commented 2 months ago

Makes sense. Could you also send this PR to upstream, to decrease conflicts amount in the future?

sure thing. Will do the next morning.

https://github.com/datastax/python-driver/pull/1213