├── README.markdown ├── redis_graph ├── .DS_Store └── __init__.py ├── setup.py └── test ├── .DS_Store ├── __init__.py └── test_redis_graph.py /README.markdown: -------------------------------------------------------------------------------- 1 | Python graph database implemented on top of Redis 2 | =========================================== 3 | 4 | Requires: 5 | 6 | * Redis 2.0+ 7 | * Newest version of [redis-py](http://github.com/andymccurdy/redis-py) 8 | * [redis_wrap](http://pypi.python.org/pypi/redis_wrap) 9 | 10 | You can also quick install it from [PyPi](http://pypi.python.org/pypi/redis_graph): 11 | 12 | * $ sudo easy_install redis_wrap 13 | * $ sudo easy_install redis_graph 14 | 15 | Related: 16 | 17 | * [Blog post about redis_graph](http://amix.dk/blog/post/19592#redis-graph-Graph-database-for-Python) 18 | 19 | 20 | Examples 21 | ======== 22 | 23 | Example of creating edges between nodes: 24 | 25 | from redis_graph import * 26 | 27 | add_edge(from_node='frodo', to_node='gandalf') 28 | 29 | assert has_edge(from_node='frodo', 30 | to_node='gandalf') == True 31 | 32 | assert list(neighbors('frodo')) == ['gandalf'] 33 | 34 | delete_edge(from_node='frodo', 35 | to_node='gandalf') 36 | 37 | assert has_edge(from_node='frodo', 38 | to_node='gandalf') == False 39 | 40 | 41 | Example of node and edge values: 42 | 43 | from redis_graph import * 44 | 45 | set_node_value('frodo', '1') 46 | assert get_node_value('frodo') == '1' 47 | 48 | set_edge_value('frodo_baggins', '2') 49 | assert get_edge_value('frodo_baggins') == '2' 50 | -------------------------------------------------------------------------------- /redis_graph/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doist/redis_graph/6cd2677867c5176327f67d2ee1c27813804f1a3a/redis_graph/.DS_Store -------------------------------------------------------------------------------- /redis_graph/__init__.py: -------------------------------------------------------------------------------- 1 | from redis_wrap import * 2 | 3 | #--- Edges ---------------------------------------------- 4 | def add_edge(from_node, to_node, system='default'): 5 | edges = get_set( from_node, system=system ) 6 | edges.add( to_node ) 7 | 8 | def delete_edge(from_node, to_node, system='default'): 9 | edges = get_set( from_node, system=system ) 10 | 11 | key_node_y = to_node 12 | if key_node_y in edges: 13 | edges.remove( key_node_y ) 14 | 15 | def has_edge(from_node, to_node, system='default'): 16 | edges = get_set( from_node, system=system ) 17 | return to_node in edges 18 | 19 | def neighbors(node_x, system='default'): 20 | return get_set( node_x, system=system ) 21 | 22 | #--- Node values ---------------------------------------------- 23 | def get_node_value(node_x, system='default'): 24 | node_key = 'nv:%s' % node_x 25 | return get_redis(system).get( node_key ) 26 | 27 | def set_node_value(node_x, value, system='default'): 28 | node_key = 'nv:%s' % node_x 29 | return get_redis(system).set( node_key, value ) 30 | 31 | #--- Edge values ---------------------------------------------- 32 | def get_edge_value(edge_x, system='default'): 33 | edge_key = 'ev:%s' % edge_x 34 | return get_redis(system).get( edge_key ) 35 | 36 | def set_edge_value(edge_x, value, system='default'): 37 | edge_key = 'ev:%s' % edge_x 38 | return get_redis(system).set( edge_key, value ) 39 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright (c) 2007 Qtrac Ltd. All rights reserved. 3 | # This module is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or (at 6 | # your option) any later version. 7 | 8 | import os 9 | from setuptools import setup 10 | 11 | setup(name='redis_graph', 12 | version = '1.0', 13 | author="amix", 14 | author_email="amix@amix.dk", 15 | url="http://www.amix.dk/", 16 | classifiers=[ 17 | "Development Status :: 4 - Beta", 18 | "Intended Audience :: Developers", 19 | "License :: OSI Approved :: BSD License", 20 | "Operating System :: OS Independent", 21 | "Programming Language :: Python", 22 | "Topic :: Software Development :: Libraries :: Python Modules", 23 | ], 24 | packages=['redis_graph', 'test'], 25 | platforms=["Any"], 26 | license="BSD", 27 | keywords='redis graph database', 28 | description="Python graph database implemented on top of Redis.", 29 | long_description="""\ 30 | redis_graph 31 | --------------- 32 | 33 | redis_graph implements a graph database on top of Redis. 34 | 35 | Requires: 36 | 37 | * Redis 2.0+ 38 | * Newest version of redis-py http://github.com/andymccurdy/redis-py 39 | * redis_wrap http://pypi.python.org/pypi/redis_wrap 40 | 41 | Related: 42 | 43 | * Blog post about redis_graph: http://amix.dk/blog/post/19592#redis-graph-Graph-database-for-Python 44 | 45 | Examples 46 | ---------- 47 | 48 | Example of creating edges between nodes:: 49 | 50 | from redis_graph import * 51 | 52 | add_edge(from_node='frodo', to_node='gandalf') 53 | 54 | assert has_edge(from_node='frodo', 55 | to_node='gandalf') == True 56 | 57 | assert list(neighbors('frodo')) == ['gandalf'] 58 | 59 | delete_edge(from_node='frodo', 60 | to_node='gandalf') 61 | 62 | assert has_edge(from_node='frodo', 63 | to_node='gandalf') == False 64 | 65 | 66 | Example of node and edge values:: 67 | 68 | from redis_graph import * 69 | 70 | set_node_value('frodo', '1') 71 | assert get_node_value('frodo') == '1' 72 | 73 | set_edge_value('frodo_baggins', '2') 74 | assert get_edge_value('frodo_baggins') == '2' 75 | 76 | Copyright: 2010 by amix 77 | License: BSD.""") 78 | -------------------------------------------------------------------------------- /test/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doist/redis_graph/6cd2677867c5176327f67d2ee1c27813804f1a3a/test/.DS_Store -------------------------------------------------------------------------------- /test/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | -------------------------------------------------------------------------------- /test/test_redis_graph.py: -------------------------------------------------------------------------------- 1 | from redis_graph import * 2 | 3 | 4 | def test_edges(): 5 | #Test adding edge 6 | add_edge(from_node='frodo', 7 | to_node='gandalf') 8 | 9 | assert has_edge(from_node='frodo', 10 | to_node='gandalf') == True 11 | 12 | assert has_edge(from_node='gandalf', 13 | to_node='frodo') == False 14 | 15 | #Test neighbors 16 | assert list(neighbors('frodo')) == ['gandalf'] 17 | assert len(neighbors('frodo')) == 1 18 | 19 | #Test deleting edge 20 | delete_edge(from_node='frodo', 21 | to_node='gandalf') 22 | 23 | assert has_edge(from_node='frodo', 24 | to_node='gandalf') == False 25 | 26 | assert len(neighbors('frodo')) == 0 27 | 28 | 29 | def test_node_values(): 30 | set_node_value('frodo', '1') 31 | assert get_node_value('frodo') == '1' 32 | 33 | 34 | def test_edge_values(): 35 | set_edge_value('frodo_baggins', '2') 36 | assert get_edge_value('frodo_baggins') == '2' 37 | 38 | 39 | if __name__ == '__main__': 40 | test_edges() 41 | test_node_values() 42 | test_edge_values() 43 | --------------------------------------------------------------------------------