From 7184bb6cc592b971fe612b2c408dc95c3652854f Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Fri, 20 Aug 2021 12:15:43 +0200 Subject: [PATCH 1/3] feat: delete_api also accept `datetime` as a value for `start` and `stop` --- influxdb_client/client/delete_api.py | 9 +++++++++ tests/test_DeleteApi.py | 27 ++++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/influxdb_client/client/delete_api.py b/influxdb_client/client/delete_api.py index fda69252..baa9d07c 100644 --- a/influxdb_client/client/delete_api.py +++ b/influxdb_client/client/delete_api.py @@ -1,8 +1,10 @@ """Delete time series data from InfluxDB.""" import datetime +from datetime import datetime from influxdb_client import DeleteService, DeletePredicateRequest +from influxdb_client.client.util.date_utils import get_date_helper class DeleteApi(object): @@ -24,5 +26,12 @@ def delete(self, start: datetime, stop: object, predicate: object, bucket: str, :param org: organization id or name :return: """ + + date_helper = get_date_helper() + if isinstance(start, datetime): + start = date_helper.to_utc(start) + if isinstance(stop, datetime): + stop = date_helper.to_utc(stop) + predicate_request = DeletePredicateRequest(start=start, stop=stop, predicate=predicate) return self._service.post_delete(delete_predicate_request=predicate_request, bucket=bucket, org=org) diff --git a/tests/test_DeleteApi.py b/tests/test_DeleteApi.py index 479bdb80..f11fccf5 100644 --- a/tests/test_DeleteApi.py +++ b/tests/test_DeleteApi.py @@ -1,3 +1,7 @@ +from datetime import datetime + +from pytz import UTC + from influxdb_client import PermissionResource, Permission, InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS from tests.base_test import BaseTest @@ -11,7 +15,6 @@ def setUp(self) -> None: for bucket in response.buckets: if bucket.name.endswith("_IT"): - print("Delete bucket: ", bucket.name) self.buckets_api.delete_bucket(bucket) self.bucket = self.create_test_bucket() @@ -25,7 +28,7 @@ def setUp(self) -> None: permissions=[read_bucket, write_bucket]) self.auth_token = authorization.token self.client.close() - self.client = InfluxDBClient(url=self.host, token=self.auth_token, debug=True, org=self.org) + self.client = InfluxDBClient(url=self.host, token=self.auth_token, org=self.org) self.delete_api = self.client.delete_api() def test_delete_buckets(self): @@ -33,7 +36,6 @@ def test_delete_buckets(self): self._write_data() q = f'from(bucket:\"{self.bucket.name}\") |> range(start: 1970-01-01T00:00:00.000000001Z)' - print(q) flux_tables = self.client.query_api().query(query=q, org=self.organization.id) self.assertEqual(len(flux_tables), 1) self.assertEqual(len(flux_tables[0].records), 12) @@ -52,19 +54,30 @@ def test_delete_buckets_by_name(self): self._write_data() q = f'from(bucket:\"{self.bucket.name}\") |> range(start: 1970-01-01T00:00:00.000000001Z)' - print(q) flux_tables = self.client.query_api().query(query=q, org=self.organization.id) self.assertEqual(len(flux_tables), 1) self.assertEqual(len(flux_tables[0].records), 12) start = "1970-01-01T00:00:00.000000001Z" stop = "1970-01-01T00:00:00.000000012Z" + self._delete_and_verify(start, stop) + + def test_start_stop_types(self): + starts_stops = [ + ("1970-01-01T00:00:00.000000001Z", "1970-01-01T00:00:00.000000012Z"), + (datetime(1970, 1, 1, 0, 0, 0, 0, UTC), datetime(1970, 1, 1, 0, 0, 0, 1, UTC)), + (datetime(1970, 1, 1, 0, 0, 0, 0), datetime(1970, 1, 1, 0, 0, 0, 1)) + ] + for start_stop in starts_stops: + self._write_data() + self._delete_and_verify(start_stop[0], start_stop[1]) + + def _delete_and_verify(self, start, stop): self.delete_api.delete(start, stop, "", bucket=self.bucket.name, org=self.organization.name) - - flux_tables2 = self.client.query_api().query( + flux_tables = self.client.query_api().query( f'from(bucket:"{self.bucket.name}") |> range(start: 1970-01-01T00:00:00.000000001Z)', org=self.organization.id) - self.assertEqual(len(flux_tables2), 0) + self.assertEqual(len(flux_tables), 0) def _write_data(self): From 837f64fe0e581fd0769583e28ff76bfc05ce4cf9 Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Fri, 20 Aug 2021 12:17:47 +0200 Subject: [PATCH 2/3] docs: update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64b0712c..af167b66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Features 1. [#319](https://github.com/influxdata/influxdb-client-python/pull/319): Add supports for array expressions in query parameters 2. [#320](https://github.com/influxdata/influxdb-client-python/pull/320): Add JSONEncoder to encode query results to JSON +1. [#317](https://github.com/influxdata/influxdb-client-python/pull/317): `delete_api` also accept `datetime` as a value for `start` and `stop` ### Bug Fixes 1. [#321](https://github.com/influxdata/influxdb-client-python/pull/321): Fixes return type for dashboard when `include=properties` is used From 60ac16189fa1496c6580fda5b25e342884a323c0 Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Fri, 20 Aug 2021 12:21:41 +0200 Subject: [PATCH 3/3] fix: code style --- influxdb_client/client/delete_api.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/influxdb_client/client/delete_api.py b/influxdb_client/client/delete_api.py index baa9d07c..19fa8714 100644 --- a/influxdb_client/client/delete_api.py +++ b/influxdb_client/client/delete_api.py @@ -1,6 +1,5 @@ """Delete time series data from InfluxDB.""" -import datetime from datetime import datetime from influxdb_client import DeleteService, DeletePredicateRequest @@ -26,7 +25,6 @@ def delete(self, start: datetime, stop: object, predicate: object, bucket: str, :param org: organization id or name :return: """ - date_helper = get_date_helper() if isinstance(start, datetime): start = date_helper.to_utc(start)