From 6ede0d090edd3f73119c0659b18d641eb80b2098 Mon Sep 17 00:00:00 2001
From: davebshow <davebshow@gmail.com>
Date: Thu, 16 Jul 2015 19:16:03 -0400
Subject: [PATCH] added rebindings, test agains GA

---
 README.md                 |  2 +-
 aiogremlin/__init__.py    |  2 +-
 aiogremlin/client.py      | 18 +++++++++++-------
 aiogremlin/exceptions.py  |  2 +-
 aiogremlin/subprotocol.py | 29 ++++++++++++++++-------------
 benchmark.py              |  2 +-
 docs/index.rst            |  4 ++--
 setup.py                  |  2 +-
 tests/tests.py            | 18 ++++++++++++++++++
 9 files changed, 52 insertions(+), 27 deletions(-)

diff --git a/README.md b/README.md
index c13962e..eef05b1 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# [aiogremlin 0.0.11](https://pypi.python.org/pypi/aiogremlin/0.0.11)
+# [aiogremlin 0.0.12](https://pypi.python.org/pypi/aiogremlin/0.0.11)
 
 ## [Official Documentation](http://aiogremlin.readthedocs.org/en/latest/)
 
diff --git a/aiogremlin/__init__.py b/aiogremlin/__init__.py
index 77ea4d3..2211276 100644
--- a/aiogremlin/__init__.py
+++ b/aiogremlin/__init__.py
@@ -4,4 +4,4 @@ from .exceptions import *
 from .connector import *
 from .subprotocol import *
 
-__version__ = "0.0.11"
+__version__ = "0.0.12"
diff --git a/aiogremlin/client.py b/aiogremlin/client.py
index 1cecf65..09340be 100644
--- a/aiogremlin/client.py
+++ b/aiogremlin/client.py
@@ -104,7 +104,7 @@ class GremlinClient:
         self._connector = None
 
     @asyncio.coroutine
-    def submit(self, gremlin, *, bindings=None, lang=None,
+    def submit(self, gremlin, *, bindings=None, lang=None, rebindings=None,
                op=None, processor=None, binary=True, session=None,
                timeout=None):
         """
@@ -116,6 +116,8 @@ class GremlinClient:
         :param dict bindings: A mapping of bindings for Gremlin script.
         :param str lang: Language of scripts submitted to the server.
             "gremlin-groovy" by default
+        :param dict rebindings: Rebind ``Graph`` and ``TraversalSource``
+            objects to different variable names in the current request
         :param str op: Gremlin Server op argument. "eval" by default.
         :param str processor: Gremlin Server processor argument. "" by default.
         :param float timeout: timeout for establishing connection (optional).
@@ -139,15 +141,17 @@ class GremlinClient:
 
         writer = GremlinWriter(ws)
 
-        ws = writer.write(gremlin, bindings=bindings, lang=lang, op=op,
+        ws = writer.write(gremlin, bindings=bindings, lang=lang,
+                          rebindings=rebindings, op=op,
                           processor=processor, binary=binary,
                           session=session)
 
         return GremlinResponse(ws, session=session, loop=self._loop)
 
     @asyncio.coroutine
-    def execute(self, gremlin, *, bindings=None, lang=None, session=None,
-                op=None, processor=None, binary=True, timeout=None):
+    def execute(self, gremlin, *, bindings=None, lang=None, rebindings=None,
+                session=None, op=None, processor=None, binary=True,
+                timeout=None):
         """
         :ref:`coroutine<coroutine>` method.
 
@@ -172,9 +176,9 @@ class GremlinClient:
         op = op or self.op
         processor = processor or self.processor
         resp = yield from self.submit(gremlin, bindings=bindings, lang=lang,
-                                      op=op, processor=processor,
-                                      binary=binary, session=session,
-                                      timeout=timeout)
+                                      rebindings=rebindings, op=op,
+                                      processor=processor, binary=binary,
+                                      session=session, timeout=timeout)
 
         return (yield from resp.get())
 
diff --git a/aiogremlin/exceptions.py b/aiogremlin/exceptions.py
index c131e17..6f30935 100644
--- a/aiogremlin/exceptions.py
+++ b/aiogremlin/exceptions.py
@@ -6,7 +6,7 @@ __all__ = ("RequestError", "GremlinServerError")
 class StatusException(IOError):
 
     def __init__(self, value, result):
-        """Handle all exceptions returned from the Gremlin Server as per:
+        """Handle all exceptions returned from the Gremlin Server.
         """
         self.value = value
         self.response = {
diff --git a/aiogremlin/subprotocol.py b/aiogremlin/subprotocol.py
index c99b3ce..e4feedd 100644
--- a/aiogremlin/subprotocol.py
+++ b/aiogremlin/subprotocol.py
@@ -46,16 +46,18 @@ class GremlinWriter:
     def __init__(self, ws):
         self.ws = ws
 
-    def write(self, gremlin, bindings=None, lang="gremlin-groovy", op="eval",
-              processor="", session=None, binary=True,
-              mime_type="application/json"):
-        message = self._prepare_message(
-            gremlin,
-            bindings=bindings,
-            lang=lang,
-            op=op,
-            processor=processor,
-            session=session)
+    def write(self, gremlin, bindings=None, lang="gremlin-groovy",
+              rebindings=None, op="eval", processor="", session=None,
+              binary=True, mime_type="application/json"):
+        if rebindings is None:
+            rebindings = {}
+        message = self._prepare_message(gremlin,
+                                        bindings,
+                                        lang,
+                                        rebindings,
+                                        op,
+                                        processor,
+                                        session)
         message = json.dumps(message)
         if binary:
             message = self._set_message_header(message, mime_type)
@@ -72,8 +74,8 @@ class GremlinWriter:
         return b"".join([mime_len, mime_type, bytes(message, "utf-8")])
 
     @staticmethod
-    def _prepare_message(gremlin, bindings=None, lang="gremlin-groovy",
-                         op="eval", processor="", session=None):
+    def _prepare_message(gremlin, bindings, lang, rebindings, op, processor,
+                         session):
         message = {
             "requestId": str(uuid.uuid4()),
             "op": op,
@@ -81,7 +83,8 @@ class GremlinWriter:
             "args": {
                 "gremlin": gremlin,
                 "bindings": bindings,
-                "language":  lang
+                "language":  lang,
+                "rebindings": rebindings
             }
         }
         if session is None:
diff --git a/benchmark.py b/benchmark.py
index 7dca160..f06b56c 100644
--- a/benchmark.py
+++ b/benchmark.py
@@ -79,7 +79,7 @@ ARGS.add_argument(
     help='message count (default: `%(default)s`)')
 ARGS.add_argument(
     '-c', '--concurrency', action="store",
-    nargs='?', type=int, default=8,
+    nargs='?', type=int, default=16,
     help='count of parallel requests (default: `%(default)s`)')
 ARGS.add_argument(
     '-p', '--poolsize', action="store",
diff --git a/docs/index.rst b/docs/index.rst
index 83569b6..e04b140 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -12,14 +12,14 @@ based on the `asyncio`_ and `aiohttp`_ libraries.
 
 Releases
 ========
-The latest release of :py:mod:`aiogremlin` is **0.0.11**.
+The latest release of :py:mod:`aiogremlin` is **0.0.12**.
 
 
 Requirements
 ============
 
 - Python 3.4
-- Tinkerpop 3 Gremlin Server 3.0.0.M9
+- Tinkerpop 3 Gremlin Server 3.0.0
 
 
 Dependencies
diff --git a/setup.py b/setup.py
index ccbea41..4ef8c5a 100644
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@ from setuptools import setup
 
 setup(
     name="aiogremlin",
-    version="0.0.11",
+    version="0.0.12",
     url="",
     license="MIT",
     author="davebshow",
diff --git a/tests/tests.py b/tests/tests.py
index df6d8f8..ef2102e 100644
--- a/tests/tests.py
+++ b/tests/tests.py
@@ -96,6 +96,24 @@ class GremlinClientTest(unittest.TestCase):
             error = True
         self.assertTrue(error)
 
+    def test_rebinding(self):
+        execute = self.gc.execute("graph2.addVertex()")
+        try:
+            self.loop.run_until_complete(execute)
+            error = False
+        except:
+            error = True
+        self.assertTrue(error)
+
+        @asyncio.coroutine
+        def go():
+            result = yield from self.gc.execute(
+                "graph2.addVertex()", rebindings={"graph2": "graph"})
+            self.assertEqual(len(result), 1)
+
+        self.loop.run_until_complete(go())
+
+
 
 class GremlinClientSessionTest(unittest.TestCase):
 
-- 
GitLab