crate 0.29.0__py2.py3-none-any.whl → 0.30.1__py2.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.
Files changed (43) hide show
  1. crate/client/__init__.py +1 -1
  2. crate/client/_pep440.py +501 -0
  3. crate/client/connection.py +3 -3
  4. crate/client/sqlalchemy/__init__.py +24 -0
  5. crate/client/sqlalchemy/compat/__init__.py +0 -0
  6. crate/client/sqlalchemy/compat/api13.py +156 -0
  7. crate/client/sqlalchemy/compat/core10.py +264 -0
  8. crate/client/sqlalchemy/compat/core14.py +359 -0
  9. crate/client/sqlalchemy/compat/core20.py +447 -0
  10. crate/client/sqlalchemy/compiler.py +1 -481
  11. crate/client/sqlalchemy/dialect.py +32 -17
  12. crate/client/sqlalchemy/sa_version.py +4 -3
  13. crate/client/sqlalchemy/tests/__init__.py +17 -6
  14. crate/client/sqlalchemy/tests/array_test.py +6 -3
  15. crate/client/sqlalchemy/tests/bulk_test.py +7 -4
  16. crate/client/sqlalchemy/tests/compiler_test.py +10 -9
  17. crate/client/sqlalchemy/tests/connection_test.py +25 -11
  18. crate/client/sqlalchemy/tests/create_table_test.py +19 -16
  19. crate/client/sqlalchemy/tests/datetime_test.py +6 -3
  20. crate/client/sqlalchemy/tests/dialect_test.py +42 -13
  21. crate/client/sqlalchemy/tests/dict_test.py +17 -13
  22. crate/client/sqlalchemy/tests/function_test.py +6 -3
  23. crate/client/sqlalchemy/tests/insert_from_select_test.py +9 -6
  24. crate/client/sqlalchemy/tests/match_test.py +6 -3
  25. crate/client/sqlalchemy/tests/update_test.py +6 -3
  26. crate/client/sqlalchemy/tests/warnings_test.py +33 -0
  27. crate/client/test_connection.py +25 -0
  28. crate/client/tests.py +98 -119
  29. crate/testing/layer.py +1 -1
  30. crate/testing/settings.py +51 -0
  31. crate/testing/test_layer.py +188 -2
  32. crate/testing/tests.py +2 -38
  33. crate/testing/util.py +20 -0
  34. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/METADATA +10 -8
  35. crate-0.30.1.dist-info/RECORD +53 -0
  36. crate-0.29.0.dist-info/RECORD +0 -44
  37. /crate-0.29.0-py3.9-nspkg.pth → /crate-0.30.1-py3.9-nspkg.pth +0 -0
  38. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/LICENSE +0 -0
  39. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/NOTICE +0 -0
  40. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/WHEEL +0 -0
  41. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/entry_points.txt +0 -0
  42. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/namespace_packages.txt +0 -0
  43. {crate-0.29.0.dist-info → crate-0.30.1.dist-info}/top_level.txt +0 -0
@@ -22,12 +22,15 @@ import json
22
22
  import os
23
23
  import tempfile
24
24
  import urllib
25
- from distutils.version import LooseVersion
25
+ from crate.client._pep440 import Version
26
26
  from unittest import TestCase, mock
27
27
  from io import BytesIO
28
28
 
29
+ import urllib3
30
+
29
31
  import crate
30
32
  from .layer import CrateLayer, prepend_http, http_url_from_host_port, wait_for_http_url
33
+ from .settings import crate_path
31
34
 
32
35
 
33
36
  class LayerUtilsTest(TestCase):
@@ -72,7 +75,7 @@ class LayerUtilsTest(TestCase):
72
75
  versions = json.loads(response.read().decode())
73
76
  version = versions["crate_testing"]
74
77
 
75
- self.assertGreaterEqual(LooseVersion(version), LooseVersion("4.5.0"))
78
+ self.assertGreaterEqual(Version(version), Version("4.5.0"))
76
79
 
77
80
  uri = "https://cdn.crate.io/downloads/releases/crate-{}.tar.gz".format(version)
78
81
  layer = CrateLayer.from_uri(uri, name="crate-by-uri", http_port=42203)
@@ -102,3 +105,186 @@ class LayerUtilsTest(TestCase):
102
105
  os.environ['JAVA_HOME'] = java_11_home
103
106
  layer = CrateLayer('java-home-test', tmpdir, env={'JAVA_HOME': java_12_home})
104
107
  self.assertEqual(layer.env['JAVA_HOME'], java_12_home)
108
+
109
+
110
+ class LayerTest(TestCase):
111
+
112
+ def test_basic(self):
113
+ """
114
+ This layer starts and stops a ``Crate`` instance on a given host, port,
115
+ a given crate node name and, optionally, a given cluster name::
116
+ """
117
+
118
+ port = 44219
119
+ transport_port = 44319
120
+
121
+ layer = CrateLayer('crate',
122
+ crate_home=crate_path(),
123
+ host='127.0.0.1',
124
+ port=port,
125
+ transport_port=transport_port,
126
+ cluster_name='my_cluster'
127
+ )
128
+
129
+ # The working directory is defined on layer instantiation.
130
+ # It is sometimes required to know it before starting the layer.
131
+ self.assertRegex(layer.wdPath(), r".+/crate_layer/crate")
132
+
133
+ # Start the layer.
134
+ layer.start()
135
+
136
+ # The urls of the crate servers to be instantiated can be obtained
137
+ # via `crate_servers`.
138
+ self.assertEqual(layer.crate_servers, ["http://127.0.0.1:44219"])
139
+
140
+ # Access the CrateDB instance on the HTTP interface.
141
+
142
+ http = urllib3.PoolManager()
143
+
144
+ stats_uri = "http://127.0.0.1:{0}/".format(port)
145
+ response = http.request('GET', stats_uri)
146
+ self.assertEqual(response.status, 200)
147
+
148
+ # The layer can be shutdown using its `stop()` method.
149
+ layer.stop()
150
+
151
+ def test_dynamic_http_port(self):
152
+ """
153
+ It is also possible to define a port range instead of a static HTTP port for the layer.
154
+
155
+ Crate will start with the first available port in the given range and the test
156
+ layer obtains the chosen port from the startup logs of the Crate process.
157
+ Note, that this feature requires a logging configuration with at least loglevel
158
+ ``INFO`` on ``http``.
159
+ """
160
+ port = '44200-44299'
161
+ layer = CrateLayer('crate', crate_home=crate_path(), port=port)
162
+ layer.start()
163
+ self.assertRegex(layer.crate_servers[0], r"http://127.0.0.1:442\d\d")
164
+ layer.stop()
165
+
166
+ def test_default_settings(self):
167
+ """
168
+ Starting a CrateDB layer leaving out optional parameters will apply the following
169
+ defaults.
170
+
171
+ The default http port is the first free port in the range of ``4200-4299``,
172
+ the default transport port is the first free port in the range of ``4300-4399``,
173
+ the host defaults to ``127.0.0.1``.
174
+
175
+ The command to call is ``bin/crate`` inside the ``crate_home`` path.
176
+ The default config file is ``config/crate.yml`` inside ``crate_home``.
177
+ The default cluster name will be auto generated using the HTTP port.
178
+ """
179
+ layer = CrateLayer('crate_defaults', crate_home=crate_path())
180
+ layer.start()
181
+ self.assertEqual(layer.crate_servers[0], "http://127.0.0.1:4200")
182
+ layer.stop()
183
+
184
+ def test_additional_settings(self):
185
+ """
186
+ The ``Crate`` layer can be started with additional settings as well.
187
+ Add a dictionary for keyword argument ``settings`` which contains your settings.
188
+ Those additional setting will override settings given as keyword argument.
189
+
190
+ The settings will be handed over to the ``Crate`` process with the ``-C`` flag.
191
+ So the setting ``threadpool.bulk.queue_size: 100`` becomes
192
+ the command line flag: ``-Cthreadpool.bulk.queue_size=100``::
193
+ """
194
+ layer = CrateLayer(
195
+ 'custom',
196
+ crate_path(),
197
+ port=44401,
198
+ settings={
199
+ "cluster.graceful_stop.min_availability": "none",
200
+ "http.port": 44402
201
+ }
202
+ )
203
+ layer.start()
204
+ self.assertEqual(layer.crate_servers[0], "http://127.0.0.1:44402")
205
+ self.assertIn("-Ccluster.graceful_stop.min_availability=none", layer.start_cmd)
206
+ layer.stop()
207
+
208
+ def test_verbosity(self):
209
+ """
210
+ The test layer hides the standard output of Crate per default. To increase the
211
+ verbosity level the additional keyword argument ``verbose`` needs to be set
212
+ to ``True``::
213
+ """
214
+ layer = CrateLayer('crate',
215
+ crate_home=crate_path(),
216
+ verbose=True)
217
+ layer.start()
218
+ self.assertTrue(layer.verbose)
219
+ layer.stop()
220
+
221
+ def test_environment_variables(self):
222
+ """
223
+ It is possible to provide environment variables for the ``Crate`` testing
224
+ layer.
225
+ """
226
+ layer = CrateLayer('crate',
227
+ crate_home=crate_path(),
228
+ env={"CRATE_HEAP_SIZE": "300m"})
229
+
230
+ layer.start()
231
+
232
+ sql_uri = layer.crate_servers[0] + "/_sql"
233
+
234
+ http = urllib3.PoolManager()
235
+ response = http.urlopen('POST', sql_uri,
236
+ body='{"stmt": "select heap[\'max\'] from sys.nodes"}')
237
+ json_response = json.loads(response.data.decode('utf-8'))
238
+
239
+ self.assertEqual(json_response["rows"][0][0], 314572800)
240
+
241
+ layer.stop()
242
+
243
+ def test_cluster(self):
244
+ """
245
+ To start a cluster of ``Crate`` instances, give each instance the same
246
+ ``cluster_name``. If you want to start instances on the same machine then
247
+ use value ``_local_`` for ``host`` and give every node different ports::
248
+ """
249
+ cluster_layer1 = CrateLayer(
250
+ 'crate1',
251
+ crate_path(),
252
+ host='_local_',
253
+ cluster_name='my_cluster',
254
+ )
255
+ cluster_layer2 = CrateLayer(
256
+ 'crate2',
257
+ crate_path(),
258
+ host='_local_',
259
+ cluster_name='my_cluster',
260
+ settings={"discovery.initial_state_timeout": "10s"}
261
+ )
262
+
263
+ # If we start both layers, they will, after a small amount of time, find each other
264
+ # and form a cluster.
265
+ cluster_layer1.start()
266
+ cluster_layer2.start()
267
+
268
+ # We can verify that by checking the number of nodes a node knows about.
269
+ http = urllib3.PoolManager()
270
+
271
+ def num_cluster_nodes(crate_layer):
272
+ sql_uri = crate_layer.crate_servers[0] + "/_sql"
273
+ response = http.urlopen('POST', sql_uri, body='{"stmt":"select count(*) from sys.nodes"}')
274
+ json_response = json.loads(response.data.decode('utf-8'))
275
+ return json_response["rows"][0][0]
276
+
277
+ # We might have to wait a moment before the cluster is finally created.
278
+ num_nodes = num_cluster_nodes(cluster_layer1)
279
+ import time
280
+ retries = 0
281
+ while num_nodes < 2: # pragma: no cover
282
+ time.sleep(1)
283
+ num_nodes = num_cluster_nodes(cluster_layer1)
284
+ retries += 1
285
+ if retries == 30:
286
+ break
287
+ self.assertEqual(num_nodes, 2)
288
+
289
+ cluster_layer1.stop()
290
+ cluster_layer2.stop()
crate/testing/tests.py CHANGED
@@ -20,48 +20,12 @@
20
20
  # with Crate these terms will supersede the license and you may use the
21
21
  # software solely pursuant to the terms of the relevant commercial agreement.
22
22
 
23
- import os
24
23
  import unittest
25
- import doctest
26
- import tempfile
27
- from .test_layer import LayerUtilsTest
28
-
29
-
30
- def docs_path(*parts):
31
- return os.path.abspath(
32
- os.path.join(
33
- os.path.dirname(os.path.dirname(__file__)), *parts
34
- )
35
- )
36
-
37
-
38
- def project_root(*parts):
39
- return os.path.abspath(
40
- os.path.join(docs_path("..", ".."), *parts)
41
- )
42
-
43
-
44
- def crate_path(*parts):
45
- return os.path.abspath(
46
- project_root("parts", "crate", *parts)
47
- )
48
-
49
-
50
- def setUp(test):
51
- test.globs['project_root'] = project_root
52
- test.globs['crate_path'] = crate_path
53
- test.globs['tempfile'] = tempfile
54
- test.globs['os'] = os
24
+ from .test_layer import LayerUtilsTest, LayerTest
55
25
 
56
26
 
57
27
  def test_suite():
58
28
  suite = unittest.TestSuite()
59
- s = doctest.DocFileSuite(
60
- 'doctests/layer.txt',
61
- setUp=setUp,
62
- optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,
63
- encoding='utf-8'
64
- )
65
- suite.addTest(s)
66
29
  suite.addTest(unittest.makeSuite(LayerUtilsTest))
30
+ suite.addTest(unittest.makeSuite(LayerTest))
67
31
  return suite
crate/testing/util.py ADDED
@@ -0,0 +1,20 @@
1
+ class ExtraAssertions:
2
+ """
3
+ Additional assert methods for unittest.
4
+
5
+ - https://github.com/python/cpython/issues/71339
6
+ - https://bugs.python.org/issue14819
7
+ - https://bugs.python.org/file43047/extra_assertions.patch
8
+ """
9
+
10
+ def assertIsSubclass(self, cls, superclass, msg=None):
11
+ try:
12
+ r = issubclass(cls, superclass)
13
+ except TypeError:
14
+ if not isinstance(cls, type):
15
+ self.fail(self._formatMessage(msg,
16
+ '%r is not a class' % (cls,)))
17
+ raise
18
+ if not r:
19
+ self.fail(self._formatMessage(msg,
20
+ '%r is not a subclass of %r' % (cls, superclass)))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: crate
3
- Version: 0.29.0
3
+ Version: 0.30.1
4
4
  Summary: CrateDB Python Client
5
5
  Home-page: https://github.com/crate/crate-python
6
6
  Author: Crate.io
@@ -28,20 +28,22 @@ License-File: LICENSE
28
28
  License-File: NOTICE
29
29
  Requires-Dist: urllib3 (<2,>=1.9)
30
30
  Provides-Extra: doc
31
- Requires-Dist: sphinx (<6,>=3.5) ; extra == 'doc'
32
- Requires-Dist: crate-docs-theme ; extra == 'doc'
31
+ Requires-Dist: sphinx (<7,>=3.5) ; extra == 'doc'
32
+ Requires-Dist: crate-docs-theme (>=0.26.5) ; extra == 'doc'
33
33
  Provides-Extra: sqlalchemy
34
- Requires-Dist: sqlalchemy (<1.5,>=1.0) ; extra == 'sqlalchemy'
35
- Requires-Dist: geojson (<3,>=2.5.0) ; extra == 'sqlalchemy'
34
+ Requires-Dist: sqlalchemy (<2.1,>=1.0) ; extra == 'sqlalchemy'
35
+ Requires-Dist: geojson (<4,>=2.5.0) ; extra == 'sqlalchemy'
36
36
  Requires-Dist: backports.zoneinfo (<1) ; (python_version < "3.9") and extra == 'sqlalchemy'
37
37
  Provides-Extra: test
38
- Requires-Dist: tox (<4,>=3) ; extra == 'test'
39
- Requires-Dist: zope.testing (<5,>=4) ; extra == 'test'
38
+ Requires-Dist: tox (<5,>=3) ; extra == 'test'
39
+ Requires-Dist: zope.testing (<6,>=4) ; extra == 'test'
40
40
  Requires-Dist: zope.testrunner (<6,>=5) ; extra == 'test'
41
41
  Requires-Dist: zc.customdoctests (<2,>=1.0.1) ; extra == 'test'
42
42
  Requires-Dist: createcoverage (<2,>=1) ; extra == 'test'
43
43
  Requires-Dist: stopit (<2,>=1.1.2) ; extra == 'test'
44
- Requires-Dist: flake8 (<5,>=4) ; extra == 'test'
44
+ Requires-Dist: flake8 (<7,>=4) ; extra == 'test'
45
+ Requires-Dist: pytz ; extra == 'test'
46
+ Requires-Dist: setuptools (<57) ; extra == 'test'
45
47
 
46
48
  =====================
47
49
  CrateDB Python Client
@@ -0,0 +1,53 @@
1
+ crate-0.30.1-py3.9-nspkg.pth,sha256=nqN0-lx5dVfXKgm9N7WRgI0lrvtTYi2PUOtTjfAMtjY,534
2
+ crate/client/__init__.py,sha256=aMAGsfGO3MHvq3jgbmIS_lW8HceoBkyDx2-yuzPwsiQ,1305
3
+ crate/client/_pep440.py,sha256=5KfZQ9kC9qfVK2YhRaMCuTETTbu-d3bMUOuC4RgHM38,14585
4
+ crate/client/blob.py,sha256=plTwGEULg5s1VdKIMW6a0Zljdkng7xw0WXkXyiwNaSU,3496
5
+ crate/client/connection.py,sha256=evWWrPFzI0lg2gPVz3Oy8PIo5AwfR-NhCSHowlpnYlw,8297
6
+ crate/client/converter.py,sha256=9_-FBp8l9LwCfBsoWO0YOW0ASkwJ-le-YJFfJMLKCew,4301
7
+ crate/client/cursor.py,sha256=qnrNM9QDQgo9RFVGU7HPmCxK15EFUWiOxW3BNlZcuNw,10758
8
+ crate/client/exceptions.py,sha256=RINQtVF9jD5f_tcKpZ8A1haztKilf9HUwjESYx-W1Bk,2242
9
+ crate/client/http.py,sha256=LFlfGra1K3LrEC0p_qK2e-ma8VdfQjaekcioL6PWdeo,20900
10
+ crate/client/test_connection.py,sha256=BUh6FmpH4tPNWk-HuDxx0Pgt5SCoPWddmdoRjYiCRRE,2808
11
+ crate/client/test_cursor.py,sha256=Q9Npq55zTY4g51kf3P7DnmTsYdv0iRwqDptKOj9ffxA,12858
12
+ crate/client/test_http.py,sha256=lm9hUnHjFFE4e188rcGxKF8ooZ-IuYlfWR8ciMQj_0U,21783
13
+ crate/client/test_util.py,sha256=xR9bdoHZplNBqIPnXSkHPNIo6bzUeKLnyqxcCmy-4Jw,1639
14
+ crate/client/tests.py,sha256=UBRgBRskvPNHfiyXF1PywVkjfZUdtFzW2Wm-nx-RrPE,12986
15
+ crate/client/sqlalchemy/__init__.py,sha256=RKwu3filTgFGaw-X200qaQa89gRutnFaG-vlxjA6elU,1965
16
+ crate/client/sqlalchemy/compiler.py,sha256=DL6exuoe-liZR4BqbAyYfi2PzlXnl3ccf1gfFJEh8Rc,7837
17
+ crate/client/sqlalchemy/dialect.py,sha256=Kz83VQNJNYdqxlLL4Sg4H0n7jN_Kg17-L-fSxb3SMgA,12940
18
+ crate/client/sqlalchemy/sa_version.py,sha256=exLPKCalcinLZ9geiqPX_pFWOoxnDkkxTy5AOabf9zw,1181
19
+ crate/client/sqlalchemy/types.py,sha256=8aXPln79WQ5QNqDJZL2TSvG31XO0pWo9EqF2XOzzgYU,8257
20
+ crate/client/sqlalchemy/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ crate/client/sqlalchemy/compat/api13.py,sha256=koqqq48UmAmrjXOyc5lV7gaVEl8xmi5xHUqTBVE5f5s,5687
22
+ crate/client/sqlalchemy/compat/core10.py,sha256=7JQZte_PXqK20znpLFJZJR_FbooJ6RJFjPTG5Z6uYWY,8641
23
+ crate/client/sqlalchemy/compat/core14.py,sha256=9cAbzR3jexN7x-iFTmr-7OjlfL7fPX4w6tGG-tZGOR4,11611
24
+ crate/client/sqlalchemy/compat/core20.py,sha256=GVHzALhSX4WV3PQvltT_RnsGtab5lR92wcs9yRZgbMU,15150
25
+ crate/client/sqlalchemy/predicates/__init__.py,sha256=HT7tHF7PxX71G8m91lqpH732iVQZtO8_NPZUIsllcys,3622
26
+ crate/client/sqlalchemy/tests/__init__.py,sha256=JhFEQQYu0QGVmUAWzhD2tTCKDcpgGn3GvCTF_O7WwL8,1933
27
+ crate/client/sqlalchemy/tests/array_test.py,sha256=9qGFk2QbtJQYNHALb0P3wOndJosUoSfVVDzBOGs07w4,4052
28
+ crate/client/sqlalchemy/tests/bulk_test.py,sha256=HBt0oCcJSjK79LEKb0vLNnKrRwmia-7e-3DuNyi8fNY,2793
29
+ crate/client/sqlalchemy/tests/compiler_test.py,sha256=M62a0h23jDjfO5Ohkw4pv_8eahKabC2hT-pQzp6DuYk,4092
30
+ crate/client/sqlalchemy/tests/connection_test.py,sha256=LW2hIlEbhQWopZZ-Zp1nejRxEfMmaGwFbxwfQFQ8sBk,4596
31
+ crate/client/sqlalchemy/tests/create_table_test.py,sha256=nvVphw-shsf8JMUopQk66-jJN89AVxYSIiAPV43KmtI,9176
32
+ crate/client/sqlalchemy/tests/datetime_test.py,sha256=E84Xd-g7kIshKdGQ6J2RMvuao-Od0iCpz11JLfyA5s8,3170
33
+ crate/client/sqlalchemy/tests/dialect_test.py,sha256=ugTljMQZ5Qkloxop3G5ptkCuBLSR_2h_2UZaiX8Dl2c,6275
34
+ crate/client/sqlalchemy/tests/dict_test.py,sha256=SJPBUs3-MPZ3XxYPF1KGz7bxbWKCArZz0dvtqhysuWk,16600
35
+ crate/client/sqlalchemy/tests/function_test.py,sha256=XQrPW8WKPI_aLgZo9kpfO2Wjx6dWp3ureqtgkghl2xk,1824
36
+ crate/client/sqlalchemy/tests/insert_from_select_test.py,sha256=UeSk-34qh_mrZNr4q1uriFI9UxPieFPJ2eKjNhHkEPc,3256
37
+ crate/client/sqlalchemy/tests/match_test.py,sha256=DpGOl5xhDdhgqyjmmPEQLUp21SwruwbLJ6wYptZXP5o,5193
38
+ crate/client/sqlalchemy/tests/update_test.py,sha256=HLLTnw3kQxtTkP6IDhnuIuaHhiWYYPwG8c8S9sD82k8,4155
39
+ crate/client/sqlalchemy/tests/warnings_test.py,sha256=KazBLNiWtNCGKL6jI5fDhVL6AAaAcUMestY49NiRPRg,1302
40
+ crate/testing/__init__.py,sha256=UnxmjVrk-eNORsitiM48W0pB6yfsaErOak8RYh_ELt8,10
41
+ crate/testing/layer.py,sha256=rIIcliZl_Elx1yQFKP-4IFcwb5jLIBKlJf8puW6oOWs,13378
42
+ crate/testing/settings.py,sha256=YTqod79NO4Lv_agPgMLGlB_fMe6baAhLXFKBZnuytBk,1652
43
+ crate/testing/test_layer.py,sha256=9x3FiyJcsB9oSY5vVzMaL_DvwJt91a_hquXS7gbDYdQ,11525
44
+ crate/testing/tests.py,sha256=seACn7a4HbQIGxJmKXiUDkuE9ossO7UsSMTwMYimOA0,1287
45
+ crate/testing/util.py,sha256=qtc72rKfvfTA9VMKjE2JSukffobd7ffCcddoTiAdO6A,690
46
+ crate-0.30.1.dist-info/LICENSE,sha256=1QGh4tR_JmDKn33ztoDv2UkER0Q4Zh1kC5J3vMWwRso,12854
47
+ crate-0.30.1.dist-info/METADATA,sha256=_BAElXFOJzZY9u7hMcU-PEHoUCxuocEDwTjYAYw2XIU,4526
48
+ crate-0.30.1.dist-info/NOTICE,sha256=vwbBS8sykCOndA1kjuu8dUInljH27kk3lcPBzQ2SMns,1159
49
+ crate-0.30.1.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
50
+ crate-0.30.1.dist-info/entry_points.txt,sha256=DN4zBP45-6hmDwuOAR9LFoxzrg-A9MqPh1Hn6UXEFPQ,68
51
+ crate-0.30.1.dist-info/namespace_packages.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
52
+ crate-0.30.1.dist-info/top_level.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
53
+ crate-0.30.1.dist-info/RECORD,,
@@ -1,44 +0,0 @@
1
- crate-0.29.0-py3.9-nspkg.pth,sha256=nqN0-lx5dVfXKgm9N7WRgI0lrvtTYi2PUOtTjfAMtjY,534
2
- crate/client/__init__.py,sha256=1RIji7qpUc70hiVboUbUBneANt_rvD0arD9S9__nOhY,1305
3
- crate/client/blob.py,sha256=plTwGEULg5s1VdKIMW6a0Zljdkng7xw0WXkXyiwNaSU,3496
4
- crate/client/connection.py,sha256=vuQb1utU2iMto1S2rYweF47HNO37QrRYP9fGEP8Bars,8324
5
- crate/client/converter.py,sha256=9_-FBp8l9LwCfBsoWO0YOW0ASkwJ-le-YJFfJMLKCew,4301
6
- crate/client/cursor.py,sha256=qnrNM9QDQgo9RFVGU7HPmCxK15EFUWiOxW3BNlZcuNw,10758
7
- crate/client/exceptions.py,sha256=RINQtVF9jD5f_tcKpZ8A1haztKilf9HUwjESYx-W1Bk,2242
8
- crate/client/http.py,sha256=LFlfGra1K3LrEC0p_qK2e-ma8VdfQjaekcioL6PWdeo,20900
9
- crate/client/test_connection.py,sha256=1e9E7o0MIgAUqJVwR2muNsVv9mj2WgKFeyb00j8prq0,1930
10
- crate/client/test_cursor.py,sha256=Q9Npq55zTY4g51kf3P7DnmTsYdv0iRwqDptKOj9ffxA,12858
11
- crate/client/test_http.py,sha256=lm9hUnHjFFE4e188rcGxKF8ooZ-IuYlfWR8ciMQj_0U,21783
12
- crate/client/test_util.py,sha256=xR9bdoHZplNBqIPnXSkHPNIo6bzUeKLnyqxcCmy-4Jw,1639
13
- crate/client/tests.py,sha256=HfeeUu-dFFrZ8OThKLHFgCXDNqOYFVoT5uYAS9feKZg,14030
14
- crate/client/sqlalchemy/__init__.py,sha256=qiHELEgWc43AaqQS3xZ_3KFYVbwgO61PuVlCg-50N4g,1090
15
- crate/client/sqlalchemy/compiler.py,sha256=KnCbG6izEd8EwXlj2fLH8BtGAVfEetmlQG7X_o5SrIg,23405
16
- crate/client/sqlalchemy/dialect.py,sha256=X9rEKzmxn26YwTiqpgrLN9KWtQqIr_T7v12AF3vaXgU,12420
17
- crate/client/sqlalchemy/sa_version.py,sha256=PcAU7KNHhdkqicyAmqPHrU-A063sCstQH3yy0u7E2Wo,1151
18
- crate/client/sqlalchemy/types.py,sha256=8aXPln79WQ5QNqDJZL2TSvG31XO0pWo9EqF2XOzzgYU,8257
19
- crate/client/sqlalchemy/predicates/__init__.py,sha256=HT7tHF7PxX71G8m91lqpH732iVQZtO8_NPZUIsllcys,3622
20
- crate/client/sqlalchemy/tests/__init__.py,sha256=nOT7g6ykr_HErjXMoLHOG1q2_NGUMshQ8c09_-X8HeA,1386
21
- crate/client/sqlalchemy/tests/array_test.py,sha256=qoX4Rfq3FTqmmE0wliobRxBTF36XFxLS6j3kjyRz6Fs,3975
22
- crate/client/sqlalchemy/tests/bulk_test.py,sha256=tKeWyR80dMAO0TRUz7aZ0T1LvSYeu1OlCXvCEVJl_5Y,2708
23
- crate/client/sqlalchemy/tests/compiler_test.py,sha256=FsU8w0lDwKhmHAFsUO_c0OHbgUFM9wGKteR4DxBHIUA,3936
24
- crate/client/sqlalchemy/tests/connection_test.py,sha256=bCR4NQhBq5ERtYxJOgl_U7ri3qejInZ16TPdmUoIjzA,4197
25
- crate/client/sqlalchemy/tests/create_table_test.py,sha256=Tz41NBpCNFPHhvLYblLFd2Gx1Lcf4cG25vPaYQYL7L4,8897
26
- crate/client/sqlalchemy/tests/datetime_test.py,sha256=N8oqdsWG2s875wNbtCctgGK78QbBpiqHdsIczccTHt0,3093
27
- crate/client/sqlalchemy/tests/dialect_test.py,sha256=C4EbFXBLQsoc4SSzyMFoXRnwumgm5FlgVH9FY10dQL0,4979
28
- crate/client/sqlalchemy/tests/dict_test.py,sha256=YyjvOQtvaTJhLcOT9Tv6yNUCYZlLPjVmerwy0n5UrFU,16565
29
- crate/client/sqlalchemy/tests/function_test.py,sha256=nVcVroqY-NDvjidwvC_UQfR9k3mfypRNqTJJ0kZ-FVM,1770
30
- crate/client/sqlalchemy/tests/insert_from_select_test.py,sha256=HlqtmhyRfGWVaRw07byr7dj6Djxor-YQYaeCe79ffc0,3155
31
- crate/client/sqlalchemy/tests/match_test.py,sha256=JF9_VAYDCAvgQCeL0Z5f2mybL74ud4Lrn6zNZ0Yb9k0,5116
32
- crate/client/sqlalchemy/tests/update_test.py,sha256=hPcfy7GtB58yyI_OfOLOOLbxPw3LZittAjDRdq33Xkw,4078
33
- crate/testing/__init__.py,sha256=UnxmjVrk-eNORsitiM48W0pB6yfsaErOak8RYh_ELt8,10
34
- crate/testing/layer.py,sha256=Vv9TNpHYGseYizLpoVzrVzH6x8V5qAiAD5WmmNhxOPA,13378
35
- crate/testing/test_layer.py,sha256=8lw9kYx3ZmDA7V14pUhJpQirRPsNX9SfewAGJPzckGw,4668
36
- crate/testing/tests.py,sha256=JzEa5An4GBISVx_q_Fpj6b7XsYJ3estFwtA1peT9SRk,2016
37
- crate-0.29.0.dist-info/LICENSE,sha256=1QGh4tR_JmDKn33ztoDv2UkER0Q4Zh1kC5J3vMWwRso,12854
38
- crate-0.29.0.dist-info/METADATA,sha256=KsV00FTRoyhifMOOKz5VJzyON5yfvzip6IoU3ImhRCc,4427
39
- crate-0.29.0.dist-info/NOTICE,sha256=vwbBS8sykCOndA1kjuu8dUInljH27kk3lcPBzQ2SMns,1159
40
- crate-0.29.0.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
41
- crate-0.29.0.dist-info/entry_points.txt,sha256=DN4zBP45-6hmDwuOAR9LFoxzrg-A9MqPh1Hn6UXEFPQ,68
42
- crate-0.29.0.dist-info/namespace_packages.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
43
- crate-0.29.0.dist-info/top_level.txt,sha256=2wP2HlpxdhgTLMl9ipi168xkm6FMq9_2bf0xGGxF_OI,6
44
- crate-0.29.0.dist-info/RECORD,,
File without changes