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