You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2021/04/02 18:26:07 UTC

[tinkerpop] branch TINKERPOP-2457 created (now 972562f)

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a change to branch TINKERPOP-2457
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


      at 972562f  TINKERPOP-2457 Added max_content_length as Python driver config

This branch includes the following new commits:

     new 972562f  TINKERPOP-2457 Added max_content_length as Python driver config

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[tinkerpop] 01/01: TINKERPOP-2457 Added max_content_length as Python driver config

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2457
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 972562fe9b6b58ff6b47f601191eed42c0e453d8
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri Apr 2 14:24:40 2021 -0400

    TINKERPOP-2457 Added max_content_length as Python driver config
---
 CHANGELOG.asciidoc                                            |  1 +
 .../src/main/jython/gremlin_python/driver/client.py           |  7 +++++--
 .../jython/gremlin_python/driver/driver_remote_connection.py  |  5 +++--
 .../main/jython/gremlin_python/driver/tornado/transport.py    |  8 ++++++--
 gremlin-python/src/main/jython/tests/driver/test_client.py    | 11 +++++++++++
 5 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 409743c..ab83865 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -33,6 +33,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed `toString()` representation of `P` when string values are present in Javascript.
 * Exposed barrier size with getter for `NoOpBarrierStep`.
 * Bumped to Netty 4.1.59.
+* Added `max_content_length` as a Python driver setting.
 * Ensured that `barrier()` additions by strategies were controlled solely by `LazyBarrierStrategy`.
 * Fixed `NullPointerException` in `ResponseMessage` deserialization for GraphSON.
 * Enabled the Gremlin.Net driver to repair its connection pool after the server was temporarily unavailable.
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/client.py b/gremlin-python/src/main/jython/gremlin_python/driver/client.py
index 2885e32..f1cb451 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/client.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/client.py
@@ -39,10 +39,12 @@ class Client:
     def __init__(self, url, traversal_source, protocol_factory=None,
                  transport_factory=None, pool_size=None, max_workers=None,
                  message_serializer=None, username="", password="",
-                 headers=None, session=""):
+                 headers=None, session="", max_content_length=None):
         self._url = url
         self._headers = headers
         self._traversal_source = traversal_source
+        if max_content_length is None:
+            max_content_length = 10 * 1024 * 1024
         if message_serializer is None:
             message_serializer = serializer.GraphSONSerializersV3d0()
         self._message_serializer = message_serializer
@@ -58,7 +60,8 @@ class Client:
                 raise Exception("Please install Tornado or pass"
                                 "custom transport factory")
             else:
-                transport_factory = lambda: TornadoTransport()
+                transport_factory = lambda: TornadoTransport(
+                    max_content_length=max_content_length)
         self._transport_factory = transport_factory
         if protocol_factory is None:
             protocol_factory = lambda: protocol.GremlinServerWSProtocol(
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 067f65b..bc7b57b 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -32,7 +32,7 @@ class DriverRemoteConnection(RemoteConnection):
                  transport_factory=None, pool_size=None, max_workers=None,
                  username="", password="", message_serializer=None,
                  graphson_reader=None, graphson_writer=None,
-                 headers=None):
+                 headers=None, max_content_length=None):
         if message_serializer is None:
             message_serializer = serializer.GraphSONMessageSerializer(
                 reader=graphson_reader,
@@ -45,7 +45,8 @@ class DriverRemoteConnection(RemoteConnection):
                                      message_serializer=message_serializer,
                                      username=username,
                                      password=password,
-                                     headers=headers)
+                                     headers=headers,
+                                     max_content_length=max_content_length)
         self._url = self._client._url
         self._traversal_source = self._client._traversal_source
 
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py b/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
index f14c518..cd0b4bf 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
@@ -26,21 +26,25 @@ __author__ = 'David M. Brown (davebshow@gmail.com)'
 
 class TornadoTransport(AbstractBaseTransport):
 
+    _default_max_content_length = 10 * 1024 * 1024
+
     def __init__(self, read_timeout=None, write_timeout=None,
                  compression_options={'compression_level': 5, 'mem_level': 5},
-                 ssl_options=None):
+                 ssl_options=None, max_content_length=_default_max_content_length):
         self._loop = ioloop.IOLoop(make_current=False)
         self._ws = None
         self._read_timeout = read_timeout
         self._write_timeout = write_timeout
         self._compression_options = compression_options
         self._ssl_options = ssl_options
+        self._max_content_length = max_content_length
 
     def connect(self, url, headers=None):
         if headers or self._ssl_options:
             url = httpclient.HTTPRequest(url, headers=headers, ssl_options=self._ssl_options)
         self._ws = self._loop.run_sync(
-            lambda: websocket.websocket_connect(url, compression_options=self._compression_options))
+            lambda: websocket.websocket_connect(url, compression_options=self._compression_options,
+                                                max_message_size=self._max_content_length))
 
     def write(self, message):
         self._loop.run_sync(
diff --git a/gremlin-python/src/main/jython/tests/driver/test_client.py b/gremlin-python/src/main/jython/tests/driver/test_client.py
index 214336f..bf85986 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_client.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_client.py
@@ -44,6 +44,17 @@ def test_connection(connection):
     assert 'host' in results_set.status_attributes
 
 
+def test_client_message_too_big(client):
+    try:
+        client = Client("http://localhost", 'g', max_content_length=1024)
+        client.submit("1+1").all().result()
+        assert False
+    except Exception:
+        assert True
+    finally:
+        client.close()
+
+
 def test_client_simple_eval(client):
     assert client.submit('1 + 1').all().result()[0] == 2