Esempio n. 1
0
def remote_connection(request):
    try:
        if request.param == 'graphbinaryv1':
            remote_conn = DriverRemoteConnection(
                anonymous_url,
                'gmodern',
                message_serializer=serializer.GraphBinarySerializersV1())
        elif request.param == 'graphsonv2':
            remote_conn = DriverRemoteConnection(
                anonymous_url,
                'gmodern',
                message_serializer=serializer.GraphSONSerializersV2d0())
        elif request.param == 'graphsonv3':
            remote_conn = DriverRemoteConnection(
                anonymous_url,
                'gmodern',
                message_serializer=serializer.GraphSONSerializersV3d0())
        else:
            raise ValueError("Invalid serializer option - " + request.param)
    except OSError:
        pytest.skip('Gremlin Server is not running')
    else:

        def fin():
            remote_conn.close()

        request.addfinalizer(fin)
        return remote_conn
Esempio n. 2
0
def prepare_traversal_source(scenario):
    # some tests create data - create a fresh remote to the empty graph and clear that graph prior to each test
    remote = DriverRemoteConnection(
        'ws://localhost:45940/gremlin',
        "ggraph",
        message_serializer=serializer.GraphSONSerializersV3d0())
    scenario.context.remote_conn["empty"] = remote
    g = Graph().traversal().withRemote(remote)
    g.V().drop().iterate()
Esempio n. 3
0
 def __init__(self,
              url,
              traversal_source,
              protocol_factory=None,
              transport_factory=None,
              pool_size=None,
              max_workers=None,
              message_serializer=None,
              username="",
              password="",
              kerberized_service="",
              headers=None,
              session=""):
     self._url = url
     self._headers = headers
     self._traversal_source = traversal_source
     if message_serializer is None:
         message_serializer = serializer.GraphSONSerializersV3d0()
     self._message_serializer = message_serializer
     self._username = username
     self._password = password
     self._session = session
     self._sessionEnabled = (session != "")
     if transport_factory is None:
         try:
             from gremlin_python.driver.tornado.transport import (
                 TornadoTransport)
         except ImportError:
             raise Exception("Please install Tornado or pass"
                             "custom transport factory")
         else:
             transport_factory = lambda: TornadoTransport()
     self._transport_factory = transport_factory
     if protocol_factory is None:
         protocol_factory = lambda: protocol.GremlinServerWSProtocol(
             self._message_serializer,
             username=self._username,
             password=self._password,
             kerberized_service=kerberized_service)
     self._protocol_factory = protocol_factory
     if self._sessionEnabled:
         if pool_size is None:
             pool_size = 1
         elif pool_size != 1:
             raise Exception("PoolSize must be 1 on session mode!")
     if pool_size is None:
         pool_size = 4
     self._pool_size = pool_size
     # This is until concurrent.futures backport 3.1.0 release
     if max_workers is None:
         # If your application is overlapping Gremlin I/O on multiple threads
         # consider passing kwarg max_workers = (cpu_count() or 1) * 5
         max_workers = pool_size
     self._executor = ThreadPoolExecutor(max_workers=max_workers)
     # Threadsafe queue
     self._pool = queue.Queue()
     self._fill_pool()
Esempio n. 4
0
    def __init__(self,
                 url,
                 traversal_source,
                 protocol_factory=None,
                 transport_factory=None,
                 pool_size=None,
                 max_workers=None,
                 message_serializer=None,
                 username="",
                 password="",
                 headers=None,
                 ping_interval=None):
        self._url = url
        self._headers = headers
        self._traversal_source = traversal_source
        if message_serializer is None:
            message_serializer = serializer.GraphSONSerializersV3d0()
        self._message_serializer = message_serializer
        self._username = username
        self._password = password
        self._ping_interval = ping_interval
        if transport_factory is None:
            try:
                from gremlin_python.driver.tornado.transport import (
                    TornadoTransport)
            except ImportError:
                raise Exception("Please install Tornado or pass"
                                "custom transport factory")
            else:
                transport_factory = lambda: TornadoTransport()
        self._transport_factory = transport_factory
        if protocol_factory is None:
            protocol_factory = lambda: protocol.GremlinServerWSProtocol(
                self._message_serializer,
                username=self._username,
                password=self._password)
        self._protocol_factory = protocol_factory
        if pool_size is None:
            pool_size = 4
        self._pool_size = pool_size
        # This is until concurrent.futures backport 3.1.0 release
        if max_workers is None:
            # Use this number because ThreadPoolExecutor is often
            # used to overlap I/O instead of CPU work.
            max_workers = (cpu_count() or 1) * 5
        self._executor = ThreadPoolExecutor(max_workers=max_workers)
        # Threadsafe queue
        self._pool = queue.Queue()
        self._fill_pool()

        if (ping_interval):
            self._ping_event_loop = asyncio.new_event_loop()
            self._ping_thread = Thread(target=self.ping_server,
                                       args=(self._ping_event_loop, ),
                                       daemon=True)
            self._ping_thread.start()
Esempio n. 5
0
def __create_remote(server_graph_name):
    if not("serializer" in world.config.user_data):
        raise ValueError('test configuration requires setting of --user-data="serializer={mime-type}"')

    if world.config.user_data["serializer"] == "application/vnd.gremlin-v3.0+json":
        s = serializer.GraphSONSerializersV3d0()
    else:
        raise ValueError('serializer not found - ' + world.config.user_data["serializer"])

    return DriverRemoteConnection('ws://localhost:45940/gremlin', server_graph_name, message_serializer=s)
Esempio n. 6
0
def prepare_traversal_source(scenario):
    # some tests create data - create a fresh remote to the empty graph and clear that graph prior to each test
    if not ("graphson" in world.config.user_data):
        raise ValueError(
            'test configuration requires setting of --user-data="graphson=*" to one of [v2,v3]'
        )

    if world.config.user_data["graphson"] == "v3":
        s = serializer.GraphSONSerializersV3d0()
    elif world.config.user_data["graphson"] == "v2":
        s = serializer.GraphSONSerializersV2d0()
    else:
        raise ValueError(
            'serializer set with --user-data="graphson=v2" must be one of [v2,v3]'
        )

    remote = DriverRemoteConnection('ws://localhost:45940/gremlin',
                                    "ggraph",
                                    message_serializer=s)
    scenario.context.remote_conn["empty"] = remote
    g = traversal().withRemote(remote)
    g.V().drop().iterate()
Esempio n. 7
0
def __create_remote(server_graph_name):
    return DriverRemoteConnection(
        'ws://localhost:45940/gremlin',
        server_graph_name,
        message_serializer=serializer.GraphSONSerializersV3d0())
Esempio n. 8
0
    def __init__(self,
                 url,
                 traversal_source,
                 protocol_factory=None,
                 transport_factory=None,
                 pool_size=None,
                 max_workers=None,
                 message_serializer=None,
                 username="",
                 password="",
                 kerberized_service="",
                 headers=None,
                 session=None,
                 **transport_kwargs):
        log.info("Creating Client with url '%s'", url)
        self._closed = False
        self._url = url
        self._headers = headers
        self._traversal_source = traversal_source
        if "max_content_length" not in transport_kwargs:
            transport_kwargs["max_content_length"] = 10 * 1024 * 1024
        if message_serializer is None:
            message_serializer = serializer.GraphSONSerializersV3d0()
        self._message_serializer = message_serializer
        self._username = username
        self._password = password
        self._session = session
        self._session_enabled = (session is not None and session != "")
        if transport_factory is None:
            try:
                from gremlin_python.driver.aiohttp.transport import (
                    AiohttpTransport)
            except ImportError:
                raise Exception("Please install AIOHTTP or pass "
                                "custom transport factory")
            else:

                def transport_factory():
                    return AiohttpTransport(**transport_kwargs)

        self._transport_factory = transport_factory
        if protocol_factory is None:

            def protocol_factory():
                return protocol.GremlinServerWSProtocol(
                    self._message_serializer,
                    username=self._username,
                    password=self._password,
                    kerberized_service=kerberized_service,
                    max_content_length=transport_kwargs["max_content_length"])

        self._protocol_factory = protocol_factory
        if self._session_enabled:
            if pool_size is None:
                pool_size = 1
            elif pool_size != 1:
                raise Exception("PoolSize must be 1 on session mode!")
        if pool_size is None:
            pool_size = 8
        self._pool_size = pool_size
        # This is until concurrent.futures backport 3.1.0 release
        if max_workers is None:
            # If your application is overlapping Gremlin I/O on multiple threads
            # consider passing kwarg max_workers = (cpu_count() or 1) * 5
            max_workers = pool_size
        self._executor = ThreadPoolExecutor(max_workers=max_workers)
        # Threadsafe queue
        self._pool = queue.Queue()
        self._fill_pool()