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 2016/08/27 00:54:25 UTC

[10/50] [abbrv] tinkerpop git commit: driver_remote_connection is much simpler where the aggregateTo is now part of the message stream process. Removed lots of dead methods that can be easily embedded in the parent method.

driver_remote_connection is much simpler where the aggregateTo is now part of the message stream process. Removed lots of dead methods that can be easily embedded in the parent method.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5fcc9224
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5fcc9224
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5fcc9224

Branch: refs/heads/master
Commit: 5fcc9224f31cbd1c54c085cc9ff277151400cfa6
Parents: 860f90b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 15:11:40 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 15:11:56 2016 -0600

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 70 +++++++++-----------
 1 file changed, 32 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5fcc9224/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
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 77354e8..271d245 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
@@ -55,33 +55,47 @@ class DriverRemoteConnection(RemoteConnection):
     @gen.coroutine
     def submit_traversal_bytecode(self, bytecode, request_id):
         message = self._get_traversal_bytecode_message(bytecode, request_id)
-        traversers = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        traversers = yield self._execute_message(message)
         raise gen.Return(traversers)
 
     @gen.coroutine
     def submit_sideEffect_keys(self, request_id):
         message = self._get_sideEffect_keys_message(request_id)
-        keys = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        keys = yield self._execute_message(message)
         raise gen.Return(set(keys))
 
     @gen.coroutine
     def submit_sideEffect_value(self, request_id, key):
         message = self._get_sideEffect_value_message(request_id, key)
-        side_effects = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
-        raise gen.Return(side_effects[0])  # don't get it wrapped in a list
+        side_effects = yield self._execute_message(message)
+        raise gen.Return(side_effects)
 
     @gen.coroutine
-    def _execute_message(self, message, resp_parser):
+    def _execute_message(self, message):
         if self._ws.protocol is None:
             self._ws = yield websocket.websocket_connect(self.url)
         self._ws.write_message(message, binary=True)
-        resp = Response(self._ws, self._username, self._password, resp_parser)
-        results = []
+        resp = Response(self._ws, self._username, self._password)
+        results = None
         while True:
             msg = yield resp.receive()
             if msg is None:
                 break
-            results.append(msg)
+            if None == results:
+                aggregateTo = msg[0]
+                if "list" == aggregateTo:
+                    results = []
+                elif "set" == aggregateTo:
+                    results = set()
+                elif "map" == aggregateTo:
+                    results = {}
+                else:
+                    results = []
+            if isinstance(results, dict):
+                for item in msg[1]:
+                    results.update(item)
+            else:
+                results += msg[1]
         raise gen.Return(results)
 
     def close(self):
@@ -90,7 +104,7 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_traversal_bytecode_message(self, bytecode, request_id):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": request_id
             },
             "op": "bytecode",
@@ -106,14 +120,14 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_sideEffect_keys_message(self, request_id):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": str(uuid.uuid4())
             },
             "op": "keys",
             "processor": "traversal",
             "args": {
                 "sideEffect": {
-                    "@type": "gremlin:uuid",
+                    "@type": "g:UUID",
                     "@value": request_id
                 }
             }
@@ -124,14 +138,14 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_sideEffect_value_message(self, request_id, key):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": str(uuid.uuid4())
             },
             "op": "gather",
             "processor": "traversal",
             "args": {
                 "sideEffect": {
-                    "@type": "gremlin:uuid",
+                    "@type": "g:UUID",
                     "@value": request_id
                 },
                 "sideEffectKey": key,
@@ -157,22 +171,17 @@ class DriverRemoteConnection(RemoteConnection):
 
     def _finalize_message(self, message):
         message = json.dumps(message)
-        return self._set_message_header(message)
-
-    @staticmethod
-    def _set_message_header(message):
         mime_type = b"application/vnd.gremlin-v2.0+json"
         mime_len = b"\x21"
         return b"".join([mime_len, mime_type, message.encode("utf-8")])
 
 
 class Response:
-    def __init__(self, ws, username, password, resp_parser):
+    def __init__(self, ws, username, password):
         self._ws = ws
         self._closed = False
         self._username = username
         self._password = password
-        self._resp_parser = resp_parser
 
     @gen.coroutine
     def receive(self):
@@ -193,27 +202,12 @@ class Response:
             self._closed = True
             return
         elif status_code in [200, 206]:
-            # todo: bulk
-            if "list" == aggregateTo:
-                results = []
-                for item in data:
-                    results.append(self._resp_parser(item))
-            elif "set" == aggregateTo:
-                results = set()
-                for item in data:
-                    results.add(self._resp_parser(item))
-            elif "map" == aggregateTo:
-                results = {}
-                for item in data:
-                    m = self._resp_parser(item)
-                    results[m.keys()[0]] = m[m.keys()[0]]
-            else:
-                results = []
-                for item in data:
-                    results.append(self._resp_parser(item))
+            results = []
+            for item in data:
+                results.append(GraphSONReader._objectify(item))
             if status_code == 200:
                 self._closed = True
-            raise gen.Return(results)
+            raise gen.Return((aggregateTo, results))
         else:
             self._closed = True
             raise GremlinServerError(