crate 0.29.0__py2.py3-none-any.whl → 0.30.1__py2.py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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