/django-postgresql-dag

Directed Acyclic Graphs with a variety of methods for both Nodes and Edges, and multiple exports (NetworkX, Pandas, etc). This project is the foundation for a commercial product, so expect regular improvements. PR's and other contributions are welcomed.

Primary LanguagePythonApache License 2.0Apache-2.0

codecov PyPI last commit Documentation Status made-with-python

Django & Postgresql-based Directed Acyclic Graphs

The main distinguishing factor for this project is that it can retrieve entire sections of a graph with far fewer queries than most other packages. The trade off is portability: it uses Postgres' Common Table Expressions (CTE) to achieve this and is therefore not compatible with other databases.

NOTE: Not all methods which would benefit from CTEs use them yet. This project is a work in progress. Again, this project is a work in progress. While functional, it is not yet fully optimized.

The primary purpose of this package is to build and manipulate DAGs. If you are looking for graph analysis or visualization, this is not the right package.

Currently, django-postgresql-dag provides numerous methods for retrieving nodes, and a few for retrieving edges within the graph. In-progress are filters within the CTEs in order to limit the area of the graph to be searched, ability to easily export to NetworkX, and other improvements and utilities.

Demo

Quickstart example

Install

pip install django-postgresql-dag

With optional dependencies for using transformations:

pip install django-postgresql-dag[transforms]

ToDo

See the checklists in issues to understand the future goals of this project.

Credits:

  1. This excellent blog post
  2. django-dag
  3. django-dag-postgresql
  4. django-treebeard-dag