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
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"]))