aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-kikimr-dev <robot-kikimr-dev@yandex-team.ru>2022-02-21 11:22:26 +0300
committerrobot-kikimr-dev <robot-kikimr-dev@yandex-team.ru>2022-02-21 11:22:26 +0300
commitb5a543fb685bd376a0022c6f5dbd804ae1795b58 (patch)
treea9000cdf9f2cbba81bee9455499929ca4608465a
parent67b4967b48ae8d719e6f8ca4b950bb8a41bce391 (diff)
downloadydb-b5a543fb685bd376a0022c6f5dbd804ae1795b58.tar.gz
Sync YDB SDK from github
Release YDB recipe binaries ref:fa53347c23b405274223f516dec4a55b1fa7ca16
-rw-r--r--ydb/public/sdk/python/CHANGELOG.md4
-rw-r--r--ydb/public/sdk/python/test-requirements.txt2
-rw-r--r--ydb/public/sdk/python/tests/aio/test_connection_pool.py19
-rw-r--r--ydb/public/sdk/python/ydb/connection.py26
-rw-r--r--ydb/public/sdk/python/ydb/driver.py12
-rw-r--r--ydb/public/sdk/python/ydb/settings.py6
6 files changed, 64 insertions, 5 deletions
diff --git a/ydb/public/sdk/python/CHANGELOG.md b/ydb/public/sdk/python/CHANGELOG.md
index 139ce6f71f..841e4596bc 100644
--- a/ydb/public/sdk/python/CHANGELOG.md
+++ b/ydb/public/sdk/python/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.0 ##
+
+* add compression support to ydb sdk
+
## 1.1.16 ##
* alias `kikimr.public.sdk.python.client` is deprecated. use `import ydb` instead.
diff --git a/ydb/public/sdk/python/test-requirements.txt b/ydb/public/sdk/python/test-requirements.txt
index 041f768474..ee7b7f8d87 100644
--- a/ydb/public/sdk/python/test-requirements.txt
+++ b/ydb/public/sdk/python/test-requirements.txt
@@ -10,7 +10,7 @@ docker==5.0.0
docker-compose==1.29.2
dockerpty==0.4.1
docopt==0.6.2
-grpcio==1.38.0
+grpcio>=1.38.0
idna==3.2
importlib-metadata==4.6.1
iniconfig==1.1.1
diff --git a/ydb/public/sdk/python/tests/aio/test_connection_pool.py b/ydb/public/sdk/python/tests/aio/test_connection_pool.py
index 534bf31bbd..221f1e39c2 100644
--- a/ydb/public/sdk/python/tests/aio/test_connection_pool.py
+++ b/ydb/public/sdk/python/tests/aio/test_connection_pool.py
@@ -22,6 +22,25 @@ async def test_async_call(endpoint, database):
@pytest.mark.asyncio
+async def test_gzip_compression(endpoint, database):
+ driver_config = ydb.DriverConfig(
+ endpoint,
+ database,
+ credentials=ydb.construct_credentials_from_environ(),
+ root_certificates=ydb.load_ydb_root_certificate(),
+ compression=ydb.RPCCompression.Gzip,
+ )
+
+ driver = Driver(driver_config=driver_config)
+
+ await driver.scheme_client.make_directory(
+ "/local/lol",
+ settings=ydb.BaseRequestSettings().with_compression(ydb.RPCCompression.Deflate),
+ )
+ await driver.stop()
+
+
+@pytest.mark.asyncio
async def test_other_credentials(endpoint, database):
driver = Driver(endpoint=endpoint, database=database)
diff --git a/ydb/public/sdk/python/ydb/connection.py b/ydb/public/sdk/python/ydb/connection.py
index e3af3d5dca..1500f4c8f8 100644
--- a/ydb/public/sdk/python/ydb/connection.py
+++ b/ydb/public/sdk/python/ydb/connection.py
@@ -300,14 +300,22 @@ def channel_factory(
logger.debug("Channel options: {}".format(options))
if driver_config.root_certificates is None and not driver_config.secure_channel:
- return channel_provider.insecure_channel(endpoint, options)
+ return channel_provider.insecure_channel(
+ endpoint, options, compression=getattr(driver_config, "compression", None)
+ )
+
root_certificates = driver_config.root_certificates
if root_certificates is None:
root_certificates = default_pem.load_default_pem()
credentials = grpc.ssl_channel_credentials(
root_certificates, driver_config.private_key, driver_config.certificate_chain
)
- return channel_provider.secure_channel(endpoint, credentials, options)
+ return channel_provider.secure_channel(
+ endpoint,
+ credentials,
+ options,
+ compression=getattr(driver_config, "compression", None),
+ )
class Connection(object):
@@ -405,7 +413,12 @@ class Connection(object):
rpc_state, timeout, metadata = self._prepare_call(
stub, rpc_name, request, settings
)
- rendezvous, result_future = rpc_state.future(request, timeout, metadata)
+ rendezvous, result_future = rpc_state.future(
+ request,
+ timeout,
+ metadata,
+ compression=getattr(settings, "compression", None),
+ )
rendezvous.add_done_callback(
lambda resp_future: _on_response_callback(
rpc_state,
@@ -443,7 +456,12 @@ class Connection(object):
stub, rpc_name, request, settings
)
try:
- response = rpc_state(request, timeout, metadata)
+ response = rpc_state(
+ request,
+ timeout,
+ metadata,
+ compression=getattr(settings, "compression", None),
+ )
_log_response(rpc_state, response)
return (
response
diff --git a/ydb/public/sdk/python/ydb/driver.py b/ydb/public/sdk/python/ydb/driver.py
index f04fb3ada7..da300373c6 100644
--- a/ydb/public/sdk/python/ydb/driver.py
+++ b/ydb/public/sdk/python/ydb/driver.py
@@ -3,6 +3,7 @@ from . import credentials as credentials_impl, table, scheme, pool
from . import tracing
import six
import os
+import grpc
if six.PY2:
Any = None
@@ -39,6 +40,14 @@ def parse_connection_string(connection_string):
return p.scheme + "://" + p.netloc, database[0]
+class RPCCompression:
+ """Indicates the compression method to be used for an RPC."""
+
+ NoCompression = grpc.Compression.NoCompression
+ Deflate = grpc.Compression.Deflate
+ Gzip = grpc.Compression.Gzip
+
+
def default_credentials(credentials=None, tracer=None):
tracer = tracer if tracer is not None else tracing.Tracer(None)
with tracer.trace("Driver.default_credentials") as ctx:
@@ -94,6 +103,7 @@ class DriverConfig(object):
"tracer",
"grpc_lb_policy_name",
"discovery_request_timeout",
+ "compression",
)
def __init__(
@@ -115,6 +125,7 @@ class DriverConfig(object):
tracer=None,
grpc_lb_policy_name="round_robin",
discovery_request_timeout=10,
+ compression=None,
):
"""
A driver config to initialize a driver instance
@@ -159,6 +170,7 @@ class DriverConfig(object):
self.tracer = tracer if tracer is not None else tracing.Tracer(None)
self.grpc_lb_policy_name = grpc_lb_policy_name
self.discovery_request_timeout = discovery_request_timeout
+ self.compression = compression
def set_database(self, database):
self.database = database
diff --git a/ydb/public/sdk/python/ydb/settings.py b/ydb/public/sdk/python/ydb/settings.py
index 96094c4978..e1e1f0f2d3 100644
--- a/ydb/public/sdk/python/ydb/settings.py
+++ b/ydb/public/sdk/python/ydb/settings.py
@@ -9,6 +9,7 @@ class BaseRequestSettings(object):
"cancel_after",
"operation_timeout",
"tracer",
+ "compression",
)
def __init__(self):
@@ -20,6 +21,11 @@ class BaseRequestSettings(object):
self.timeout = None
self.cancel_after = None
self.operation_timeout = None
+ self.compression = None
+
+ def with_compression(self, compression):
+ self.compression = compression
+ return self
def with_trace_id(self, trace_id):
"""