Exemple #1
0
 def deserialize_message(cls, message):
     if isinstance(message, dict):
         if message.get('@type', '') == 'g:Traverser':
             obj = GraphSONReader._objectify(message)
         else:
             obj = Traverser(message.get('@value', message))
     else:
         obj = Traverser(message)
     return obj
Exemple #2
0
 def deserialize_message(cls, message):
     if isinstance(message, dict):
         if message.get('@type', '') == 'g:Traverser':
             obj = GraphSONReader._objectify(message)
         else:
             obj = Traverser(message.get('@value', message))
     else:
         obj = Traverser(message)
     return obj
Exemple #3
0
    def receive(self):
        if self._closed:
            return
        recv_message = yield self._websocket.read_message()
        recv_message = json.loads(recv_message.decode('utf-8'))
        status_code = recv_message["status"]["code"]
        aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")

        # authentification required then
        if status_code == 407:
            self._websocket.write_message(b"".join([
                b"\x21", b"application/vnd.gremlin-v2.0+json",
                json.dumps(
                    {
                        "requestId": {
                            "@type": "g:UUID",
                            "@value": str(uuid.uuid4())
                        },
                        "op": "authentication",
                        "processor": "traversal",
                        "args": {
                            "sasl":
                            base64.b64encode(b"".join([
                                b"\x00",
                                self._username.encode("utf-8"), b"\x00",
                                self._password.encode("utf-8")
                            ])).decode()
                        }
                    },
                    separators=(',', ':')).encode("utf-8")
            ]),
                                          binary=True)
            results = yield self.receive()
            raise gen.Return(results)
        elif status_code == 204:
            self._closed = True
            return
        elif status_code in [200, 206]:
            results = []
            for item in recv_message["result"]["data"]:
                results.append(GraphSONReader._objectify(item))
            if status_code == 200:
                self._closed = True
            raise gen.Return((aggregateTo, results))
        else:
            self._closed = True
            raise GremlinServerError("{0}: {1}".format(
                status_code, recv_message["status"]["message"]))
    def receive(self):
        if self._closed:
            return
        recv_message = yield self._websocket.read_message()
        recv_message = json.loads(recv_message.decode('utf-8'))
        status_code = recv_message["status"]["code"]
        aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")

        # authentification required then
        if status_code == 407:
            self._websocket.write_message(
                b"".join([b"\x21",
                          b"application/vnd.gremlin-v2.0+json",
                          json.dumps({
                              "requestId": {
                                  "@type": "g:UUID",
                                  "@value": str(uuid.uuid4())
                              },
                              "op": "authentication",
                              "processor": "traversal",
                              "args": {
                                  "sasl": base64.b64encode(
                                      b"".join([b"\x00", self._username.encode("utf-8"),
                                                b"\x00", self._password.encode("utf-8")])).decode()
                              }
                          }, separators=(',', ':')).encode("utf-8")]), binary=True)
            results = yield self.receive()
            raise gen.Return(results)
        elif status_code == 204:
            self._closed = True
            return
        elif status_code in [200, 206]:
            results = []
            for item in recv_message["result"]["data"]:
                results.append(GraphSONReader._objectify(item))
            if status_code == 200:
                self._closed = True
            raise gen.Return((aggregateTo, results))
        else:
            self._closed = True
            raise GremlinServerError(
                "{0}: {1}".format(status_code, recv_message["status"]["message"]))