e6data-python-connector 2.3.9rc3__tar.gz → 2.3.9rc5__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 (77) hide show
  1. {e6data_python_connector-2.3.9rc3/e6data_python_connector.egg-info → e6data_python_connector-2.3.9rc5}/PKG-INFO +2 -2
  2. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/README.md +1 -1
  3. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/cluster_manager.py +16 -2
  4. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/e6data_grpc.py +6 -1
  5. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5/e6data_python_connector.egg-info}/PKG-INFO +2 -2
  6. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/setup.py +1 -1
  7. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/LICENSE +0 -0
  8. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/MANIFEST.in +0 -0
  9. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/__init__.py +0 -0
  10. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/cluster_server/__init__.py +0 -0
  11. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/cluster_server/cluster_pb2.py +0 -0
  12. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/cluster_server/cluster_pb2_grpc.py +0 -0
  13. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/common.py +0 -0
  14. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/constants.py +0 -0
  15. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/datainputstream.py +0 -0
  16. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/date_time_utils.py +0 -0
  17. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/dialect.py +0 -0
  18. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/e6x_vector/__init__.py +0 -0
  19. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/e6x_vector/constants.py +0 -0
  20. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/e6x_vector/ttypes.py +0 -0
  21. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/exceptions.py +0 -0
  22. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/QueryEngineService.py +0 -0
  23. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/__init__.py +0 -0
  24. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/constants.py +0 -0
  25. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/e6x_engine_pb2.py +0 -0
  26. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/e6x_engine_pb2.pyi +0 -0
  27. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/e6x_engine_pb2_grpc.py +0 -0
  28. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/server/ttypes.py +0 -0
  29. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/strategy.py +0 -0
  30. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector/typeId.py +0 -0
  31. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector.egg-info/SOURCES.txt +0 -0
  32. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector.egg-info/dependency_links.txt +0 -0
  33. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector.egg-info/entry_points.txt +0 -0
  34. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector.egg-info/requires.txt +0 -0
  35. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/e6data_python_connector.egg-info/top_level.txt +0 -0
  36. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/pyproject.toml +0 -0
  37. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/setup.cfg +0 -0
  38. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/__init__.py +0 -0
  39. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/analyze_38_nines.py +0 -0
  40. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/analyze_all_cases.py +0 -0
  41. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/analyze_binary.py +0 -0
  42. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/analyze_correct_value.py +0 -0
  43. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/analyze_fields.py +0 -0
  44. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/check_decimal_errors.py +0 -0
  45. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/cleanup_test_files.py +0 -0
  46. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/debug_38_nines.py +0 -0
  47. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/debug_binary.py +0 -0
  48. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/final_test.py +0 -0
  49. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/move_tests.py +0 -0
  50. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/quick_test.py +0 -0
  51. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_38_nines.py +0 -0
  52. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_all_decimal128_cases.py +0 -0
  53. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_cluster_manager_efficiency.py +0 -0
  54. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_cluster_manager_none_strategy.py +0 -0
  55. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_cluster_manager_strategy.py +0 -0
  56. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_comprehensive.py +0 -0
  57. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_current_implementation.py +0 -0
  58. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_decimal128_binary_parsing.py +0 -0
  59. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_decimal128_parsing.py +0 -0
  60. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_fix.py +0 -0
  61. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_improved_parsing.py +0 -0
  62. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_known_case.py +0 -0
  63. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_manual_analysis.py +0 -0
  64. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_mock_server.py +0 -0
  65. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_multiprocessing_fix.py +0 -0
  66. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_new_implementation.py +0 -0
  67. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_specific_binary.py +0 -0
  68. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_strategy.py +0 -0
  69. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_strategy_logic.py +0 -0
  70. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_strategy_persistence_fix.py +0 -0
  71. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_strategy_sharing_fix.py +0 -0
  72. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/test_user_binary_value.py +0 -0
  73. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/tests.py +0 -0
  74. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/tests_grpc.py +0 -0
  75. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/validate_decimal128.py +0 -0
  76. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/validate_implementation.py +0 -0
  77. {e6data_python_connector-2.3.9rc3 → e6data_python_connector-2.3.9rc5}/test/verify_decimal_fix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: e6data-python-connector
3
- Version: 2.3.9rc3
3
+ Version: 2.3.9rc5
4
4
  Summary: Client for the e6data distributed SQL Engine.
5
5
  Home-page: https://github.com/e6x-labs/e6data-python-connector
6
6
  Author: e6data, Inc.
@@ -38,7 +38,7 @@ Dynamic: summary
38
38
 
39
39
  # e6data Python Connector
40
40
 
41
- ![version](https://img.shields.io/badge/version-2.3.9rc3-blue.svg)
41
+ ![version](https://img.shields.io/badge/version-2.3.9rc5-blue.svg)
42
42
 
43
43
  ## Introduction
44
44
 
@@ -1,6 +1,6 @@
1
1
  # e6data Python Connector
2
2
 
3
- ![version](https://img.shields.io/badge/version-2.3.9rc3-blue.svg)
3
+ ![version](https://img.shields.io/badge/version-2.3.9rc5-blue.svg)
4
4
 
5
5
  ## Introduction
6
6
 
@@ -213,25 +213,30 @@ class ClusterManager:
213
213
  user=self._user,
214
214
  password=self._password
215
215
  )
216
+ print('STATUS', payload)
216
217
  elif request_type == "resume":
217
218
  payload = cluster_pb2.ResumeRequest(
218
219
  user=self._user,
219
220
  password=self._password
220
221
  )
222
+ print('RESUME', payload)
221
223
 
222
224
  # If we have an active strategy, use it first
223
225
  if current_strategy is not None:
224
226
  try:
225
227
  if request_type == "status":
228
+
226
229
  response = self._get_connection.status(
227
230
  payload,
228
231
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=current_strategy)
229
232
  )
233
+ print('STATUS 2', response, payload)
230
234
  elif request_type == "resume":
231
235
  response = self._get_connection.resume(
232
236
  payload,
233
237
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=current_strategy)
234
238
  )
239
+ print('RESUME 2', response, payload)
235
240
  else:
236
241
  raise ValueError(f"Unknown request type: {request_type}")
237
242
 
@@ -254,11 +259,13 @@ class ClusterManager:
254
259
  payload,
255
260
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=alternative_strategy)
256
261
  )
262
+ print('STATUS 3', response, payload)
257
263
  elif request_type == "resume":
258
264
  response = self._get_connection.resume(
259
265
  payload,
260
266
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=alternative_strategy)
261
267
  )
268
+ print('RESUME 3', response, payload)
262
269
 
263
270
  # Update active strategy since the alternative worked
264
271
  _set_active_strategy(alternative_strategy)
@@ -288,11 +295,13 @@ class ClusterManager:
288
295
  payload,
289
296
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=strategy)
290
297
  )
298
+ print('STATUS 4', response, payload)
291
299
  elif request_type == "resume":
292
300
  response = self._get_connection.resume(
293
301
  payload,
294
302
  metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=strategy)
295
303
  )
304
+ print('RESUME 4', response, payload)
296
305
  else:
297
306
  raise ValueError(f"Unknown request type: {request_type}")
298
307
 
@@ -365,13 +374,15 @@ class ClusterManager:
365
374
  # Retrieve the current cluster status with strategy header
366
375
  try:
367
376
  current_status = self._try_cluster_request("status")
368
- except _InactiveRpcError:
377
+ except _InactiveRpcError as e:
378
+ print('ERROR', e, 'Returning false1')
369
379
  return False
370
380
  if current_status.status == 'suspended':
371
381
  # Send the resume request with strategy header
372
382
  try:
373
383
  response = self._try_cluster_request("resume")
374
- except _InactiveRpcError:
384
+ except _InactiveRpcError as e:
385
+ print('ERROR', e, 'Returning false2')
375
386
  return False
376
387
  elif current_status.status == 'active':
377
388
  return True
@@ -380,15 +391,18 @@ class ClusterManager:
380
391
  If cluster cannot be resumed due to its current state,
381
392
  or already in a process of resuming, terminate the operation.
382
393
  """
394
+ print('ERROR', '!resuming', 'Returning false3')
383
395
  return False
384
396
 
385
397
  for status in self._check_cluster_status():
386
398
  if status == 'active':
387
399
  return True
388
400
  elif status == 'failed' or time.time() > self._timeout:
401
+ print('ERROR', 'timed-out', 'Returning false3')
389
402
  return False
390
403
  # Wait for 5 seconds before the next status check
391
404
  time.sleep(5)
405
+ print('ERROR', 'Nothing worked', 'Returning false3')
392
406
  return False
393
407
 
394
408
  def suspend(self):
@@ -380,6 +380,7 @@ class Connection(object):
380
380
  """
381
381
  self.grpc_auto_resume_timeout_seconds = self._grpc_options.pop('grpc_auto_resume_timeout_seconds')
382
382
  self._create_client()
383
+ self._hash = str(datetime.datetime.now().timestamp()) + 'hash' + str(id(self))
383
384
 
384
385
  @property
385
386
  def _get_grpc_options(self):
@@ -520,6 +521,7 @@ class Connection(object):
520
521
  _set_pending_strategy(new_strategy)
521
522
  # Don't apply immediately - let new queries use fresh connections
522
523
  except _InactiveRpcError as e:
524
+ print(self._hash, self.cluster_name, 'Error during authentication with active strategy:', active_strategy, file=sys.stderr)
523
525
  if e.code() == grpc.StatusCode.UNKNOWN and 'status: 456' in e.details():
524
526
  # Strategy changed, clear cache and retry
525
527
  _clear_strategy_cache()
@@ -561,6 +563,7 @@ class Connection(object):
561
563
  # Don't apply immediately - let new queries use fresh connections
562
564
  break
563
565
  except _InactiveRpcError as e:
566
+ print(self._hash, self.cluster_name, 'Error during authentication with strategy:', strategy, file=sys.stderr)
564
567
  if e.code() == grpc.StatusCode.UNKNOWN and 'status: 456' in e.details():
565
568
  # Wrong strategy, try the next one
566
569
  last_error = e
@@ -587,6 +590,7 @@ class Connection(object):
587
590
  cluster_uuid=self.cluster_name,
588
591
  timeout=self.grpc_auto_resume_timeout_seconds
589
592
  ).resume()
593
+ print(self._hash, self.cluster_name, 'Cluster resume status:', status, file=sys.stderr)
590
594
  if status:
591
595
  # return self.get_session_id
592
596
  authenticate_request = e6x_engine_pb2.AuthenticateRequest(
@@ -595,7 +599,7 @@ class Connection(object):
595
599
  )
596
600
  authenticate_response = self._client.authenticate(
597
601
  authenticate_request,
598
- metadata=_get_grpc_header(cluster=self.cluster_uuid, strategy=_get_active_strategy())
602
+ metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy())
599
603
  )
600
604
  self._session_id = authenticate_response.sessionId
601
605
  # Check for new strategy in authenticate response
@@ -611,6 +615,7 @@ class Connection(object):
611
615
  else:
612
616
  raise e
613
617
  except Exception as e:
618
+ print(self._hash, self.cluster_name, 'Error during authentication:', e, file=sys.stderr)
614
619
  self._channel.close()
615
620
  raise e
616
621
  return self._session_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: e6data-python-connector
3
- Version: 2.3.9rc3
3
+ Version: 2.3.9rc5
4
4
  Summary: Client for the e6data distributed SQL Engine.
5
5
  Home-page: https://github.com/e6x-labs/e6data-python-connector
6
6
  Author: e6data, Inc.
@@ -38,7 +38,7 @@ Dynamic: summary
38
38
 
39
39
  # e6data Python Connector
40
40
 
41
- ![version](https://img.shields.io/badge/version-2.3.9rc3-blue.svg)
41
+ ![version](https://img.shields.io/badge/version-2.3.9rc5-blue.svg)
42
42
 
43
43
  ## Introduction
44
44
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  import setuptools
14
14
 
15
- VERSION = (2, 3, 9,'rc3')
15
+ VERSION = (2, 3, 9,'rc5')
16
16
 
17
17
 
18
18
  def get_long_desc():