示例#1
0
文件: session.py 项目: brean/goblin
    async def submit(self, bytecode):
        """
        Submit a query to the Gremiln Server.

        :param str gremlin: Gremlin script to submit to server.
        :param dict bindings: A mapping of bindings for Gremlin script.

        :returns:
            `gremlin_python.driver.remove_connection.RemoteTraversal`
            object
        """
        await self.flush()
        remote_traversal = await self.remote_connection.submit(bytecode)
        traversers = remote_traversal.traversers
        side_effects = remote_traversal.side_effects
        result_set = ResultSet(traversers.request_id, traversers._timeout,
                               self._loop)
        self._loop.create_task(self._receive(traversers, result_set))
        return RemoteTraversal(result_set, side_effects)
示例#2
0
    async def data_received(self, data, results_dict=None):
        if data is None:
            raise protocol.GremlinServerError({
                'code': 500,
                'message': 'Server disconnected',
                'attributes': {}
            })
        if results_dict is None:
            results_dict = {}

        self.__log.debug(f"{data=}")
        message = self._message_serializer.deserialize_message(data)
        self.__log.debug(f"{message=}")
        request_id = message['requestId']
        status_code = message['status']['code']
        result_data = message['result']['data']
        msg = message['status']['message']

        if request_id in results_dict:
            self.__log.debug(f"{request_id=} is in {results_dict=}")
            result_set = results_dict[request_id]
        else:
            result_set = ResultSet(None, None)

        aggregate_to = message['result']['meta'].get('aggregateTo', 'list')
        result_set.aggregate_to = aggregate_to

        if status_code == 407:
            auth = b''.join([
                b'\x00',
                self._username.encode('utf-8'), b'\x00',
                self._password.encode('utf-8')
            ])
            request_message = request.RequestMessage(
                'traversal', 'authentication',
                {'sasl': base64.b64encode(auth).decode()})
            await self.write(request_id, request_message)
        elif status_code == 204:
            self.__log.debug(f"{status_code=} Queuing None to ResultSet")
            result_set.queue_result(None)
        else:
            self.__log.debug(f"{status_code=}")
            if result_data:
                self.__log.debug(f"{result_data=}")
                for result in result_data:
                    self.__log.debug(f"{result=}")
                    message = Message(status_code, result, msg)
                    self.__log.debug(f"Queuing {message=}")
                    result_set.queue_result(message)
                #message = Message(status_code, result_data, msg)
                #result_set.queue_result(message)
            else:
                message = Message(status_code, data, msg)
                result_set.queue_result(message)
            if status_code != 206:
                result_set.queue_result(None)