aiogremlin

aiogremlin is a port of the official Gremlin-Python designed for integration with event loop based asynchronous Python networking libraries, including asyncio, aiohttp, and tornado. It uses the async/await syntax introduced in PEP 492, and is therefore Python 3.5+ only.

aiogremlin tries to follow Gremlin-Python as closely as possible both in terms of API and implementation. It is regularly rebased against the official Apache Git repository, and will be released according to the TinkerPop release schedule.

Note that this NOT an official Apache project component, it is a THIRD PARTY PACKAGE!

Releases

The latest release of aiogremlin is 3.2.5.

Requirements

  • Python 3.5+
  • TinkerPop 3.2.5

Dependencies

  • aiohttp 1.3.3
  • PyYAML 3.12

Installation

Install using pip:

$ pip install aiogremlin

For this version, a separate install of gremlinpython is required:

$ pip install gremlinpython --no-deps

Getting Started

aiogremlin has a simple API that is quite easy to use. However, as it relies heavily on asyncio and aiohttp, it is helpful to be familiar with the basics of these modules.

aiogremlin is very similar to Gremlin-Python, except it is all async, all the time.

Minimal Example

Submit a script to the Gremlin Server:

>>> import asyncio
>>> from aiogremlin import DriverRemoteConnection, Graph

>>> loop = asyncio.get_event_loop()

>>> async def go(loop):
...    remote_connection = await DriverRemoteConnection.open(
...        'ws://localhost:8182/gremlin', 'g')
...    g = Graph().traversal().withRemote(remote_connection)
...    vertices = await g.V().toList()
...    return vertices

>>> results = loop.run_until_complete(go(loop))
>>> results
# [v[1], v[2], v[3], v[4], v[5], v[6]]

The above example demonstrates how aiogremlin uses the event loop to drive communication with the Gremlin Server, but the rest of examples are written as if they were run in a Python interpreter. In reality, this isn’t possible, so remember, code must be wrapped in a coroutine and run with the event loop.

Contribute

Contributions are welcome. If you find a bug, or have a suggestion, please open an issue on Github. If you would like to make a pull request, please make sure to add appropriate tests and run them:

$ python setup.py test

In the future there will be CI and more info on contributing.

Contents:

Indices and tables