Git Product home page Git Product logo

gremlinpy's Introduction

Goblin logo AIO Gremlin - Now known as gremlinpy - Patched by jerlendds

tests Requirements test coverage codecov Codacy Scrutinizer

PyPi Supported Versions Downloads SemVer docs Gitter

Installation:

pip install git+https://github.com/jerlendds/gremlinpy.git

Message from jerlendds

  1. I changed the package name to gremlinpy so my imports are slightly shorter

  2. I was trying to use the gremlin-python, goblin, aiogremlin in my FastAPI app but I kept running into a loop error from the aiogremlin library. This patch fixes that and later on I may publish it to PyPi after I get some use out of this fix.

Example usage from my OSINTBuddy app

import json
from gremlinpy import DriverRemoteConnection, Graph
from gremlinpy.process.graph_traversal import AsyncGraphTraversal
from gremlin_python.process.traversal import T, Cardinality

def process_vertices(graph: List[dict]):
    output = []
    for obj in v:
        out = {
            "id":  obj[T.id],
            "label": obj[T.label],
        }
        del obj[T.id]
        del obj[T.label]
        for k, v in obj.items():
            out[k] = v[0]
        output.append(out)
    return output

async def some_async_function(plugin_label):
    async with await DriverRemoteConnection.open('ws://janus:8182/g', 'g') as connection:
        g: AsyncGraphTraversal = Graph().traversal().withRemote(connection)
        await g.addV('Some Label').property('id', 1). \
            property(Cardinality.single, 'name', 'Apache'). \
            property('lastname', 'example'). \
            next()
        vertices = await g.V().valueMap(True).toList()
        json_graph: List[dict] = process_vertices(vertices)
        print(json.dumps(json_graph, indent=4))

An asynchronous DSL for the Gremlin-Python driver

Licensed under the Apache Software License v2

gremlinpy is an asynchronous DSL based on the official Gremlin-Python GLV 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.

gremlinpy tries to follow Gremlin-Python as closely as possible both in terms of API and implementation. It is released according to the TinkerPop release schedule.

gremlinpy is built directly on top of TinkerPop and allows access to all of the internals. This ensures all the TinkerPop features are available to the end-user. The TinkerPop stack provides several tools which can be used to work with gremlinpy.

  • Gremlin, a database agnostic query language for Graph Databases.
  • Gremlin Server, a server that provides an interface for executing Gremlin on remote machines.
  • a data-flow framework for splitting, merging, filtering, and transforming of data
  • Graph Computer, a framework for running algorithms against a Graph Database.
  • Support for both OLTP and OLAP engines.
  • TinkerGraph a Graph Database and the reference implementation for TinkerPop.
  • Native Gephi integration for visualizing graphs.
  • Interfaces for most major Graph Compute Engines including Hadoop M/R. Spark, and Giraph.

gremlinpy also supports any of the many databases compatible with TinkerPop including the following.

Some unique feature provided by the Goblin OGM include:

  • High level asynchronous Object Graph Mapper (OGM) - provided by goblin
  • Integration with the official gremlin-python Gremlin Language Variant (GLV)
  • Native Python support for asynchronous programing including coroutines, iterators, and context managers as specified in PEP 492
  • Asynchronous Python driver for the Gremlin Server
  • Async Graph implementation that produces native Python GLV traversals

Getting Started

import asyncio
from gremlinpy 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()
  await remote_connection.close()
  return vertices


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

Donating

Librepay

As an open-source project we run entierly off donations. Buy one of our hardworking developers a beer by donating with one of the above buttons. All donations go to our bounty fund and allow us to place bounties on important bugs and enhancements.

Support and Documentation

The official homepage for the project is at http://goblin-ogm.com. The source is officially hosted on QOTO GitLab here however an up-to-date mirror is also maintained on Github here.

Documentation: latest

For support please use Gitter or the official Goblin mailing list and Discourse forum.

Please file bugs and feature requests on QOTO GitLab our old archived issues can still be viewed on Github as well.

Aparapi conforms to the Semantic Versioning 2.0.0 standard. That means the version of a release isnt arbitrary but rather describes how the library interfaces have changed. Read more about it at the Semantic Versioning page.

Related Projects

This particular repository only represents the one component in a suite of libraries. There are several other related repositories worth taking a look at.

  • Goblin - The main library, the Goblin OGM
  • Goblin Buildchain - Docker image containing all the needed tools to build and test Goblin.
  • Python Gremlin Server - Vanilla Gremlin-server with Python Script Engine loaded, used for integration testing.

gremlinpy's People

Contributors

jerlendds avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.