e6data-python-connector 2.3.10rc4__tar.gz → 2.3.10rc5__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.
- {e6data_python_connector-2.3.10rc4/e6data_python_connector.egg-info → e6data_python_connector-2.3.10rc5}/PKG-INFO +2 -2
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/README.md +1 -1
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/e6data_grpc.py +38 -21
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5/e6data_python_connector.egg-info}/PKG-INFO +2 -2
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/setup.py +1 -1
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/LICENSE +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/MANIFEST.in +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/__init__.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/cluster_manager.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/cluster_server/__init__.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/cluster_server/cluster_pb2.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/cluster_server/cluster_pb2_grpc.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/common.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/constants.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/datainputstream.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/date_time_utils.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/dialect.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/e6x_vector/__init__.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/e6x_vector/constants.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/e6x_vector/ttypes.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/exceptions.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/QueryEngineService.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/__init__.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/constants.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/e6x_engine_pb2.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/e6x_engine_pb2.pyi +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/e6x_engine_pb2_grpc.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/server/ttypes.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/strategy.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector/typeId.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector.egg-info/SOURCES.txt +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector.egg-info/dependency_links.txt +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector.egg-info/entry_points.txt +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector.egg-info/requires.txt +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/e6data_python_connector.egg-info/top_level.txt +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/pyproject.toml +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/setup.cfg +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/__init__.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_38_nines.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_all_cases.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_binary.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_correct_value.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_fields.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/check_decimal_errors.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/cleanup_test_files.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/debug_38_nines.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/debug_binary.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/final_test.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/move_tests.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/quick_test.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_38_nines.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_all_decimal128_cases.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_cluster_manager_efficiency.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_cluster_manager_none_strategy.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_cluster_manager_strategy.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_comprehensive.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_current_implementation.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_decimal128_binary_parsing.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_decimal128_parsing.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_fix.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_improved_parsing.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_known_case.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_manual_analysis.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_mock_server.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_multiprocessing_fix.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_new_implementation.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_specific_binary.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy_logic.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy_persistence_fix.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy_sharing_fix.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_user_binary_value.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/tests.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/tests_grpc.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/validate_decimal128.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/validate_implementation.py +0 -0
- {e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/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.
|
|
3
|
+
Version: 2.3.10rc5
|
|
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
|
-

|
|
42
42
|
|
|
43
43
|
## Introduction
|
|
44
44
|
|
|
@@ -10,6 +10,7 @@ import datetime
|
|
|
10
10
|
import re
|
|
11
11
|
import sys
|
|
12
12
|
import time
|
|
13
|
+
import uuid
|
|
13
14
|
from decimal import Decimal
|
|
14
15
|
from io import BytesIO
|
|
15
16
|
from ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
|
|
@@ -135,10 +136,15 @@ STRATEGY_CACHE_TIMEOUT = 300
|
|
|
135
136
|
# Global set to track debug-enabled connections
|
|
136
137
|
_debug_connections = set()
|
|
137
138
|
|
|
138
|
-
def
|
|
139
|
+
def _generate_trace_id():
|
|
140
|
+
"""Generate a unique trace ID for tracking requests across a session."""
|
|
141
|
+
return str(uuid.uuid4())[:8] # Use first 8 characters for readability
|
|
142
|
+
|
|
143
|
+
def _strategy_debug_log(message, trace_id=None):
|
|
139
144
|
"""Log strategy debug messages if any connection has debug enabled."""
|
|
140
145
|
if _debug_connections:
|
|
141
|
-
|
|
146
|
+
trace_info = f"[{trace_id}] " if trace_id else ""
|
|
147
|
+
_logger.debug(f"[E6DATA_STRATEGY_DEBUG] {time.strftime('%Y-%m-%d %H:%M:%S')} - {trace_info}{message}")
|
|
142
148
|
|
|
143
149
|
|
|
144
150
|
def _get_shared_strategy():
|
|
@@ -304,7 +310,7 @@ def _get_strategy_debug_info():
|
|
|
304
310
|
}
|
|
305
311
|
|
|
306
312
|
|
|
307
|
-
def _get_grpc_header(engine_ip=None, cluster=None, strategy=None, session_id=None, request_type=None):
|
|
313
|
+
def _get_grpc_header(engine_ip=None, cluster=None, strategy=None, session_id=None, request_type=None, trace_id=None):
|
|
308
314
|
"""Generate gRPC metadata headers for the request."""
|
|
309
315
|
# Use the strategy module's implementation
|
|
310
316
|
headers = _get_strategy_header(engine_ip=engine_ip, cluster=cluster, strategy=strategy)
|
|
@@ -313,7 +319,7 @@ def _get_grpc_header(engine_ip=None, cluster=None, strategy=None, session_id=Non
|
|
|
313
319
|
if _debug_connections:
|
|
314
320
|
session_info = f", session: {session_id}" if session_id else ""
|
|
315
321
|
request_info = f" [{request_type}]" if request_type else ""
|
|
316
|
-
_strategy_debug_log(f"Sending headers{request_info}: strategy={strategy}, cluster={cluster}, engine_ip={engine_ip}{session_info}")
|
|
322
|
+
_strategy_debug_log(f"Sending headers{request_info}: strategy={strategy}, cluster={cluster}, engine_ip={engine_ip}{session_info}", trace_id)
|
|
317
323
|
|
|
318
324
|
return headers
|
|
319
325
|
|
|
@@ -387,6 +393,7 @@ class Connection(object):
|
|
|
387
393
|
self.cluster_name = cluster_name
|
|
388
394
|
self._session_id = None
|
|
389
395
|
self._session_strategy = None # Track which strategy was used for current session
|
|
396
|
+
self._trace_id = _generate_trace_id() # Generate trace ID for this connection
|
|
390
397
|
self._host = host
|
|
391
398
|
self._port = port
|
|
392
399
|
|
|
@@ -411,7 +418,7 @@ class Connection(object):
|
|
|
411
418
|
self._debug = debug
|
|
412
419
|
if self._debug:
|
|
413
420
|
_debug_connections.add(id(self))
|
|
414
|
-
_strategy_debug_log(f"Debug mode enabled for connection {id(self)}")
|
|
421
|
+
_strategy_debug_log(f"Debug mode enabled for connection {id(self)}", self._trace_id)
|
|
415
422
|
|
|
416
423
|
self._create_client()
|
|
417
424
|
|
|
@@ -530,11 +537,11 @@ class Connection(object):
|
|
|
530
537
|
# Check if session strategy matches current active strategy
|
|
531
538
|
elif self._session_id and self._session_strategy and self._session_strategy != _get_active_strategy():
|
|
532
539
|
# Session was created with different strategy, need to re-authenticate
|
|
533
|
-
_strategy_debug_log(f"Session strategy mismatch: session {self._session_id} created with {self._session_strategy}, current active is {_get_active_strategy()}")
|
|
540
|
+
_strategy_debug_log(f"Session strategy mismatch: session {self._session_id} created with {self._session_strategy}, current active is {_get_active_strategy()}", self._trace_id)
|
|
534
541
|
old_session_id = self._session_id
|
|
535
542
|
self._session_id = None
|
|
536
543
|
self._session_strategy = None
|
|
537
|
-
_strategy_debug_log(f"Invalidating session {old_session_id} due to strategy mismatch")
|
|
544
|
+
_strategy_debug_log(f"Invalidating session {old_session_id} due to strategy mismatch", self._trace_id)
|
|
538
545
|
self.close()
|
|
539
546
|
self._create_client()
|
|
540
547
|
|
|
@@ -552,19 +559,22 @@ class Connection(object):
|
|
|
552
559
|
|
|
553
560
|
if active_strategy and not pending_strategy:
|
|
554
561
|
# Use cached strategy only if there's no pending strategy
|
|
555
|
-
_strategy_debug_log(f"Authenticating with cached strategy: {active_strategy} (session: {self._session_id})")
|
|
562
|
+
_strategy_debug_log(f"Authenticating with cached strategy: {active_strategy} (session: {self._session_id})", self._trace_id)
|
|
556
563
|
try:
|
|
557
564
|
authenticate_response = self._client.authenticate(
|
|
558
565
|
authenticate_request,
|
|
559
566
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=active_strategy,
|
|
560
|
-
session_id=self._session_id, request_type="authenticate")
|
|
567
|
+
session_id=self._session_id, request_type="authenticate", trace_id=self._trace_id)
|
|
561
568
|
)
|
|
562
569
|
self._session_id = authenticate_response.sessionId
|
|
563
570
|
if not self._session_id:
|
|
564
571
|
raise ValueError("Invalid credentials.")
|
|
565
572
|
# Track which strategy was used for this session
|
|
566
573
|
self._session_strategy = active_strategy
|
|
567
|
-
|
|
574
|
+
# Generate new trace ID for this authenticated session
|
|
575
|
+
old_trace_id = self._trace_id
|
|
576
|
+
self._trace_id = _generate_trace_id()
|
|
577
|
+
_strategy_debug_log(f"Authentication successful with strategy: {active_strategy}, session: {self._session_id}, new trace: {self._trace_id} (was: {old_trace_id})", self._trace_id)
|
|
568
578
|
# Check for new strategy in authenticate response
|
|
569
579
|
if hasattr(authenticate_response, 'new_strategy') and authenticate_response.new_strategy:
|
|
570
580
|
new_strategy = authenticate_response.new_strategy.lower()
|
|
@@ -604,20 +614,23 @@ class Connection(object):
|
|
|
604
614
|
_strategy_debug_log(f"No cached strategy, will try strategies in order: {strategies}")
|
|
605
615
|
last_error = None
|
|
606
616
|
for strategy in strategies:
|
|
607
|
-
_strategy_debug_log(f"Attempting authentication with strategy: {strategy} (no session yet)")
|
|
617
|
+
_strategy_debug_log(f"Attempting authentication with strategy: {strategy} (no session yet)", self._trace_id)
|
|
608
618
|
try:
|
|
609
619
|
authenticate_response = self._client.authenticate(
|
|
610
620
|
authenticate_request,
|
|
611
621
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=strategy,
|
|
612
|
-
session_id=None, request_type="authenticate")
|
|
622
|
+
session_id=None, request_type="authenticate", trace_id=self._trace_id)
|
|
613
623
|
)
|
|
614
624
|
self._session_id = authenticate_response.sessionId
|
|
615
625
|
if self._session_id:
|
|
616
626
|
# Success! Cache this strategy
|
|
617
|
-
_strategy_debug_log(f"Authentication successful with strategy: {strategy}, session: {self._session_id}")
|
|
618
627
|
_set_active_strategy(strategy)
|
|
619
628
|
# Track which strategy was used for this session
|
|
620
629
|
self._session_strategy = strategy
|
|
630
|
+
# Generate new trace ID for this authenticated session
|
|
631
|
+
old_trace_id = self._trace_id
|
|
632
|
+
self._trace_id = _generate_trace_id()
|
|
633
|
+
_strategy_debug_log(f"Authentication successful with strategy: {strategy}, session: {self._session_id}, new trace: {self._trace_id} (was: {old_trace_id})", self._trace_id)
|
|
621
634
|
|
|
622
635
|
# Check for new strategy in authenticate response
|
|
623
636
|
if hasattr(authenticate_response, 'new_strategy') and authenticate_response.new_strategy:
|
|
@@ -706,6 +719,7 @@ class Connection(object):
|
|
|
706
719
|
This method ensures that the gRPC channel is properly closed and the session ID is reset to None.
|
|
707
720
|
"""
|
|
708
721
|
old_session = self._session_id
|
|
722
|
+
old_trace_id = self._trace_id
|
|
709
723
|
if self._channel is not None:
|
|
710
724
|
self._channel.close()
|
|
711
725
|
self._channel = None
|
|
@@ -716,7 +730,10 @@ class Connection(object):
|
|
|
716
730
|
if self._debug:
|
|
717
731
|
_debug_connections.discard(id(self))
|
|
718
732
|
session_info = f", session was: {old_session}" if old_session else ""
|
|
719
|
-
_strategy_debug_log(f"Debug mode disabled for connection {id(self)}{session_info}")
|
|
733
|
+
_strategy_debug_log(f"Debug mode disabled for connection {id(self)}{session_info}, trace: {old_trace_id}", old_trace_id)
|
|
734
|
+
|
|
735
|
+
# Reset trace ID to None after connection close
|
|
736
|
+
self._trace_id = None
|
|
720
737
|
|
|
721
738
|
def check_connection(self):
|
|
722
739
|
"""
|
|
@@ -780,7 +797,7 @@ class Connection(object):
|
|
|
780
797
|
clear_response = self._client.clear(
|
|
781
798
|
clear_request,
|
|
782
799
|
metadata=_get_grpc_header(engine_ip=engine_ip, cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
783
|
-
session_id=self.connection.get_session_id, request_type="clear")
|
|
800
|
+
session_id=self.connection.get_session_id, request_type="clear", trace_id=self.connection._trace_id)
|
|
784
801
|
)
|
|
785
802
|
|
|
786
803
|
# Check for new strategy in clear response
|
|
@@ -812,7 +829,7 @@ class Connection(object):
|
|
|
812
829
|
cancel_response = self._client.cancelQuery(
|
|
813
830
|
cancel_query_request,
|
|
814
831
|
metadata=_get_grpc_header(engine_ip=engine_ip, cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
815
|
-
session_id=self._session_id, request_type="query_cancel")
|
|
832
|
+
session_id=self._session_id, request_type="query_cancel", trace_id=self._trace_id)
|
|
816
833
|
)
|
|
817
834
|
|
|
818
835
|
# Check for new strategy in cancel response
|
|
@@ -837,7 +854,7 @@ class Connection(object):
|
|
|
837
854
|
dry_run_response = self._client.dryRun(
|
|
838
855
|
dry_run_request,
|
|
839
856
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
840
|
-
session_id=self.get_session_id, request_type="dry_run")
|
|
857
|
+
session_id=self.get_session_id, request_type="dry_run", trace_id=self._trace_id)
|
|
841
858
|
)
|
|
842
859
|
return dry_run_response.dryrunValue
|
|
843
860
|
|
|
@@ -860,7 +877,7 @@ class Connection(object):
|
|
|
860
877
|
get_table_response = self._client.getTablesV2(
|
|
861
878
|
get_table_request,
|
|
862
879
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
863
|
-
session_id=self.get_session_id, request_type="get_tables")
|
|
880
|
+
session_id=self.get_session_id, request_type="get_tables", trace_id=self._trace_id)
|
|
864
881
|
)
|
|
865
882
|
|
|
866
883
|
# Check for new strategy in get tables response
|
|
@@ -889,7 +906,7 @@ class Connection(object):
|
|
|
889
906
|
get_columns_response = self._client.getColumnsV2(
|
|
890
907
|
get_columns_request,
|
|
891
908
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
892
|
-
session_id=self.get_session_id, request_type="get_columns")
|
|
909
|
+
session_id=self.get_session_id, request_type="get_columns", trace_id=self._trace_id)
|
|
893
910
|
)
|
|
894
911
|
|
|
895
912
|
# Check for new strategy in get columns response
|
|
@@ -914,7 +931,7 @@ class Connection(object):
|
|
|
914
931
|
get_schema_response = self._client.getSchemaNamesV2(
|
|
915
932
|
get_schema_request,
|
|
916
933
|
metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy(),
|
|
917
|
-
session_id=self.get_session_id, request_type="get_schema")
|
|
934
|
+
session_id=self.get_session_id, request_type="get_schema", trace_id=self._trace_id)
|
|
918
935
|
)
|
|
919
936
|
|
|
920
937
|
# Check for new strategy in get schema names response
|
|
@@ -1020,7 +1037,7 @@ class Cursor(DBAPICursor):
|
|
|
1020
1037
|
else:
|
|
1021
1038
|
strategy = _get_active_strategy()
|
|
1022
1039
|
return _get_grpc_header(engine_ip=self._engine_ip, cluster=self.connection.cluster_name, strategy=strategy,
|
|
1023
|
-
session_id=self.connection.get_session_id, request_type=request_type)
|
|
1040
|
+
session_id=self.connection.get_session_id, request_type=request_type, trace_id=self.connection._trace_id)
|
|
1024
1041
|
|
|
1025
1042
|
@property
|
|
1026
1043
|
def metadata(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: e6data-python-connector
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.10rc5
|
|
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
|
-

|
|
42
42
|
|
|
43
43
|
## Introduction
|
|
44
44
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_38_nines.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_all_cases.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_binary.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/analyze_fields.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/check_decimal_errors.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/cleanup_test_files.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/debug_38_nines.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/debug_binary.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_38_nines.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_comprehensive.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_known_case.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_manual_analysis.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_mock_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_specific_binary.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy.py
RENAMED
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/test_strategy_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/validate_decimal128.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-2.3.10rc4 → e6data_python_connector-2.3.10rc5}/test/verify_decimal_fix.py
RENAMED
|
File without changes
|