crate 2.0.0.dev5__py3-none-any.whl → 2.0.0.dev6__py3-none-any.whl

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.
crate/client/__init__.py CHANGED
@@ -29,7 +29,7 @@ __all__ = [
29
29
 
30
30
  # version string read from setup.py using a regex. Take care not to break the
31
31
  # regex!
32
- __version__ = "2.0.0.dev5"
32
+ __version__ = "2.0.0.dev6"
33
33
 
34
34
  # codeql[py/unused-global-variable]
35
35
  apilevel = "2.0"
crate/client/http.py CHANGED
@@ -20,6 +20,8 @@
20
20
  # software solely pursuant to the terms of the relevant commercial agreement.
21
21
 
22
22
 
23
+ import calendar
24
+ import datetime as dt
23
25
  import heapq
24
26
  import io
25
27
  import logging
@@ -84,19 +86,35 @@ def super_len(o):
84
86
  return None
85
87
 
86
88
 
87
- def cratedb_json_encoder(obj: t.Any) -> str:
89
+ epoch_aware = dt.datetime(1970, 1, 1, tzinfo=dt.timezone.utc)
90
+ epoch_naive = dt.datetime(1970, 1, 1)
91
+
92
+
93
+ def json_encoder(obj: t.Any) -> t.Union[int, str]:
88
94
  """
89
95
  Encoder function for orjson, with additional type support.
90
96
 
91
- - Python's `Decimal` type.
92
- - freezegun's `FakeDatetime` type.
97
+ - Python's `Decimal` type will be serialized to `str`.
98
+ - Python's `dt.datetime` and `dt.date` types will be
99
+ serialized to `int` after converting to milliseconds
100
+ since epoch.
93
101
 
94
102
  https://github.com/ijl/orjson#default
103
+ https://cratedb.com/docs/crate/reference/en/latest/general/ddl/data-types.html#type-timestamp
95
104
  """
96
105
  if isinstance(obj, Decimal):
97
106
  return str(obj)
98
- elif hasattr(obj, "isoformat"):
99
- return obj.isoformat()
107
+ if isinstance(obj, dt.datetime):
108
+ if obj.tzinfo is not None:
109
+ delta = obj - epoch_aware
110
+ else:
111
+ delta = obj - epoch_naive
112
+ return int(
113
+ delta.microseconds / 1000.0
114
+ + (delta.seconds + delta.days * 24 * 3600) * 1000.0
115
+ )
116
+ if isinstance(obj, dt.date):
117
+ return calendar.timegm(obj.timetuple()) * 1000
100
118
  raise TypeError
101
119
 
102
120
 
@@ -108,8 +126,12 @@ def json_dumps(obj: t.Any) -> bytes:
108
126
  """
109
127
  return orjson.dumps(
110
128
  obj,
111
- default=cratedb_json_encoder,
112
- option=(orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY),
129
+ default=json_encoder,
130
+ option=(
131
+ orjson.OPT_PASSTHROUGH_DATETIME
132
+ | orjson.OPT_NON_STR_KEYS
133
+ | orjson.OPT_SERIALIZE_NUMPY
134
+ ),
113
135
  )
114
136
 
115
137
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: crate
3
- Version: 2.0.0.dev5
3
+ Version: 2.0.0.dev6
4
4
  Summary: CrateDB Python Client
5
5
  Home-page: https://github.com/crate/crate-python
6
6
  Author: Crate.io
@@ -1,17 +1,17 @@
1
- crate/client/__init__.py,sha256=ApP2LvuWsycIceLILaXsUgyFR96CcOx7C7hI5OXEdtc,1349
1
+ crate/client/__init__.py,sha256=Mu7v8I3SFaCqVv2FueZnU6v0IZYjdUaihbaHTkATTLM,1349
2
2
  crate/client/_pep440.py,sha256=iwY5wopxbgbwsT0ImANrwN3V_ZYQHhSr7lEdVT5dQRM,42
3
3
  crate/client/blob.py,sha256=aMo6ZNHGT3Zq_yR3gcpd3CKrJvfqUAhExhKtHUwC5Io,3460
4
4
  crate/client/connection.py,sha256=80v9_--YilDAaIQpejf3G_TWGz9iwUkixwHAL66sDm0,8098
5
5
  crate/client/converter.py,sha256=Qci0MNcpz1jAnjquG8Ld9LI84_iHVInrv4HMb8r5zzg,4313
6
6
  crate/client/cursor.py,sha256=Mlk-TVLzM4zSSr7GxcHK4Mjbt1KQeMfNFNrPBtGjk-c,10741
7
7
  crate/client/exceptions.py,sha256=wMyJmOB3RP5kuPeW9f0fEb-1AKZcGSTyIGvN0HqpqUw,2557
8
- crate/client/http.py,sha256=b_EVzChq6FGQg4tNc-3fheUas9mybQJI4aMHKYVpGEU,22513
8
+ crate/client/http.py,sha256=wNTlFOwYv9R4dMWvaZ7b-U-uzUwLNJB7pknwiE_QGkE,23270
9
9
  crate/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  crate/testing/layer.py,sha256=jvHRWTRE4Zal211UO0HWPFcbprAcaGB3WyAUDR7BKFQ,13376
11
11
  crate/testing/util.py,sha256=BPEZ8DavXwyOTCmOQnP5QjQlapEw3harzKK4w2HOTA4,3264
12
- crate-2.0.0.dev5.dist-info/LICENSE,sha256=s_w3FXmAYQuatqsgvyYLnGyC_13KOqp3W1DUEXO9RpY,10175
13
- crate-2.0.0.dev5.dist-info/METADATA,sha256=GpJuX0mupTBanwtxvK3MJhMYRAyhdnhl48NtkeCPNsw,5655
14
- crate-2.0.0.dev5.dist-info/NOTICE,sha256=jfWOHkoZKjNATGXMfgpMJdL38ki_ZZTgR6M9CUUJxrM,1159
15
- crate-2.0.0.dev5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
16
- crate-2.0.0.dev5.dist-info/top_level.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
17
- crate-2.0.0.dev5.dist-info/RECORD,,
12
+ crate-2.0.0.dev6.dist-info/LICENSE,sha256=s_w3FXmAYQuatqsgvyYLnGyC_13KOqp3W1DUEXO9RpY,10175
13
+ crate-2.0.0.dev6.dist-info/METADATA,sha256=AEedSYqZFFHb7rO2c7pOXUE3S3d-zbU8CuRK-DoKADE,5655
14
+ crate-2.0.0.dev6.dist-info/NOTICE,sha256=jfWOHkoZKjNATGXMfgpMJdL38ki_ZZTgR6M9CUUJxrM,1159
15
+ crate-2.0.0.dev6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
16
+ crate-2.0.0.dev6.dist-info/top_level.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
17
+ crate-2.0.0.dev6.dist-info/RECORD,,