ransacklib 1.1.0.dev1__tar.gz → 1.1.0.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {ransacklib-1.1.0.dev1/ransacklib.egg-info → ransacklib-1.1.0.dev2}/PKG-INFO +1 -1
  2. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/pyproject.toml +1 -1
  3. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/transformer.py +13 -12
  4. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2/ransacklib.egg-info}/PKG-INFO +1 -1
  5. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/tests/test_transformer.py +13 -13
  6. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/LICENSE +0 -0
  7. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/README.rst +0 -0
  8. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/__init__.py +0 -0
  9. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/exceptions.py +0 -0
  10. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/function.py +0 -0
  11. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/operator.py +0 -0
  12. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/parser.py +0 -0
  13. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransack/py.typed +0 -0
  14. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransacklib.egg-info/SOURCES.txt +0 -0
  15. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransacklib.egg-info/dependency_links.txt +0 -0
  16. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransacklib.egg-info/requires.txt +0 -0
  17. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/ransacklib.egg-info/top_level.txt +0 -0
  18. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/setup.cfg +0 -0
  19. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/tests/test_operator.py +0 -0
  20. {ransacklib-1.1.0.dev1 → ransacklib-1.1.0.dev2}/tests/test_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ransacklib
3
- Version: 1.1.0.dev1
3
+ Version: 1.1.0.dev2
4
4
  Summary: A modern, extensible language for manipulation with structured data
5
5
  Author-email: "Rajmund H. Hruška" <rajmund.hruska@cesnet.cz>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ransacklib"
7
- version = "1.1.0.dev1"
7
+ version = "1.1.0.dev2"
8
8
  description = "A modern, extensible language for manipulation with structured data"
9
9
  license = "MIT"
10
10
  readme = "README.rst"
@@ -20,7 +20,7 @@ Classes:
20
20
 
21
21
  import re
22
22
  from collections.abc import Mapping, MutableSequence
23
- from datetime import datetime, timedelta, timezone
23
+ from datetime import datetime, timedelta
24
24
  from typing import Any, cast
25
25
 
26
26
  from ipranges import IP4, IP6, IP4Net, IP4Range, IP6Net, IP6Range
@@ -322,27 +322,22 @@ class ExpressionTransformer(Transformer):
322
322
 
323
323
  # Convert to datetime object
324
324
  dtime = datetime.fromisoformat(datetime_str)
325
-
326
- # If no time zone was specified, then set to UTC
327
- if dtime.tzinfo is None:
328
- dtime = dtime.replace(tzinfo=timezone.utc)
329
-
330
325
  tw = TokenWrapper(_add_tokens(date, time), dtime)
331
326
 
332
327
  return Tree("datetime", [tw], _create_meta(tw))
333
328
 
334
329
  def datetime_only_date(self, date: Token) -> Tree[TokenWrapper]:
335
330
  """
336
- Transforms a date string into a datetime object set to midnight UTC.
331
+ Transforms a date string into a datetime object set to midnight.
337
332
 
338
333
  Parameters:
339
334
  date: A token representing the date.
340
335
  Returns:
341
- A tree node wrapping a datetime object set to midnight UTC.
336
+ A tree node wrapping a datetime object set to midnight.
342
337
  """
343
338
  return Tree(
344
339
  "datetime",
345
- [TokenWrapper(date, datetime.fromisoformat(date + "T00:00:00+00:00"))],
340
+ [TokenWrapper(date, datetime.fromisoformat(date + "T00:00:00"))],
346
341
  _create_meta(date),
347
342
  )
348
343
 
@@ -837,9 +832,12 @@ class SQLInterpreter(Interpreter):
837
832
  return (str(token.real_value), type(token.real_value))
838
833
 
839
834
  def datetime(self, token: TokenWrapper) -> tuple[str, type[datetime]]:
840
- # When using 'real_value', the time zone is always defined
835
+ if token.real_value.tzinfo is not None:
836
+ type_ = "TIMESTAMP WITH TIME ZONE"
837
+ else:
838
+ type_ = "TIMESTAMP"
841
839
  return (
842
- f"TIMESTAMP WITH TIME ZONE '{token.real_value.isoformat()}'",
840
+ f"{type_} '{token.real_value.isoformat()}'",
843
841
  type(token.real_value),
844
842
  )
845
843
 
@@ -877,7 +875,10 @@ class SQLInterpreter(Interpreter):
877
875
  elif issubclass(l_type, float) and issubclass(r_type, float):
878
876
  range_type = "numrange"
879
877
  elif issubclass(l_type, datetime) and issubclass(r_type, datetime):
880
- range_type = "tstzrange"
878
+ if "WITH TIME ZONE" in l_sql or "WITH TIME ZONE" in r_sql:
879
+ range_type = "tstzrange"
880
+ else:
881
+ range_type = "tsrange"
881
882
  elif issubclass(l_type, (IP4, IP6)) and issubclass(r_type, (IP4, IP6)):
882
883
  return (
883
884
  f"iprange({l_sql}, {r_sql})",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ransacklib
3
- Version: 1.1.0.dev1
3
+ Version: 1.1.0.dev2
4
4
  Summary: A modern, extensible language for manipulation with structured data
5
5
  Author-email: "Rajmund H. Hruška" <rajmund.hruska@cesnet.cz>
6
6
  License-Expression: MIT
@@ -150,7 +150,7 @@ class TestExpressionTransformer:
150
150
  ),
151
151
  ("2024-01-01T12:00:00Z", datetime, "2024-01-01 12:00:00+00:00"),
152
152
  ("2024-01-01 12:00:00-02:00", datetime, "2024-01-01 12:00:00-02:00"),
153
- ("2024-01-01T12:00:00", datetime, "2024-01-01 12:00:00+00:00"),
153
+ ("2024-01-01T12:00:00", datetime, "2024-01-01 12:00:00"),
154
154
  ("01:00:00", timedelta, "1:00:00"),
155
155
  ("1d01:00:00", timedelta, "1 day, 1:00:00"),
156
156
  ("'constant1'", str, "constant1"),
@@ -233,11 +233,11 @@ class TestFilter:
233
233
  ("(4 + 5 * 2 - 6 / 3) % 5", 2),
234
234
  (
235
235
  "2024-01-01 - 1D00:00:00",
236
- datetime.fromisoformat("2023-12-31T00:00:00+00:00"),
236
+ datetime.fromisoformat("2023-12-31T00:00:00"),
237
237
  ),
238
238
  (
239
239
  "2023-11-28 15:30:00 + 0D10:00:00",
240
- datetime.fromisoformat("2023-11-29T01:30:00+00:00"),
240
+ datetime.fromisoformat("2023-11-29T01:30:00"),
241
241
  ),
242
242
  ("3D00:00:00 + 0D05:00:00", timedelta(days=3, hours=5)),
243
243
  ("0D10:00:00 + 0D00:20:00", timedelta(hours=10, minutes=20)),
@@ -249,15 +249,15 @@ class TestFilter:
249
249
  (
250
250
  "1D00:00:00 + 2024-02-28..2025-02-28",
251
251
  (
252
- datetime.fromisoformat("2024-02-29T00:00:00+00:00"),
253
- datetime.fromisoformat("2025-03-01T00:00:00+00:00"),
252
+ datetime.fromisoformat("2024-02-29T00:00:00"),
253
+ datetime.fromisoformat("2025-03-01T00:00:00"),
254
254
  ),
255
255
  ),
256
256
  (
257
257
  "2024-01-01 .. 2024-12-31 - 1D00:00:00",
258
258
  (
259
- datetime.fromisoformat("2023-12-31T00:00:00+00:00"),
260
- datetime.fromisoformat("2024-12-30T00:00:00+00:00"),
259
+ datetime.fromisoformat("2023-12-31T00:00:00"),
260
+ datetime.fromisoformat("2024-12-30T00:00:00"),
261
261
  ),
262
262
  ),
263
263
  # Scalar and list
@@ -286,8 +286,8 @@ class TestFilter:
286
286
  (
287
287
  "2023-11-28 + [1D00:00:00, 2D00:00:00]",
288
288
  [
289
- datetime.fromisoformat("2023-11-29T00:00:00+00:00"),
290
- datetime.fromisoformat("2023-11-30T00:00:00+00:00"),
289
+ datetime.fromisoformat("2023-11-29T00:00:00"),
290
+ datetime.fromisoformat("2023-11-30T00:00:00"),
291
291
  ],
292
292
  ),
293
293
  # Test Comparisons
@@ -534,7 +534,7 @@ class TestSQLInterpreter:
534
534
  ("23.22", "23.22"),
535
535
  ("-0.224", "-0.224"),
536
536
  ("13e19", "1.3e+20"),
537
- ("2025-01-01", "TIMESTAMP WITH TIME ZONE '2025-01-01T00:00:00+00:00'"),
537
+ ("2025-01-01", "TIMESTAMP '2025-01-01T00:00:00'"),
538
538
  (
539
539
  "2025-01-01T22:14:24.142+02:00",
540
540
  "TIMESTAMP WITH TIME ZONE '2025-01-01T22:14:24.142000+02:00'",
@@ -554,8 +554,8 @@ class TestSQLInterpreter:
554
554
  (
555
555
  "[2024-12-12, 2025-12-12]",
556
556
  (
557
- "ARRAY[TIMESTAMP WITH TIME ZONE '2024-12-12T00:00:00+00:00', "
558
- "TIMESTAMP WITH TIME ZONE '2025-12-12T00:00:00+00:00']"
557
+ "ARRAY[TIMESTAMP '2024-12-12T00:00:00', "
558
+ "TIMESTAMP '2025-12-12T00:00:00']"
559
559
  ),
560
560
  ),
561
561
  ("[]", "ARRAY[]"),
@@ -584,7 +584,7 @@ class TestSQLInterpreter:
584
584
  ),
585
585
  ),
586
586
  (
587
- "2024-01-01..2024-12-31",
587
+ "2024-01-01T00:00:00+00:00..2024-12-31T00:00:00Z",
588
588
  (
589
589
  "CASE WHEN TIMESTAMP WITH TIME ZONE '2024-01-01T00:00:00+00:00' "
590
590
  "< TIMESTAMP WITH TIME ZONE '2024-12-31T00:00:00+00:00' THEN "
File without changes