Homepage: https://pycograph.com/
PyPI: https://pypi.org/project/pycograph/
RedisConf 2021 talk
Explore your Python code with graph queries
Pycograph creates a RedisGraph model of your Python code. You can:
- query it with Cypher
- visualize it with RedisInsight
Requirements:
- Python 3.8 or higher
- a Redis instance with the RedisGraph module (local, remote or via Docker)
- not strictly necessary, but recommended: RedisInsight for visualizing the query results
Install Pycograph from PyPI:
pip install pycograph
Start a Redis instance with the RedisGraph module and RedisInsight. E.g. via Docker containers:
docker run -d -p 6379:6379 redislabs/redismod
docker run -d -v redisinsight:/db -p 8001:8001 redislabs/redisinsight:latest
Visit your RedisInstance at http://localhost:8001 in a browser.
Connect to your local Redis database.
Create a RedisGraph model of your project's code with the pycograph load
command:
pycograph load --project-dir ~/code/your-project --test-types
By default, if you don't provide the --project-dir
option, Pycograph tries to find Python code in the current working directory.
Run a query in RedisInsight. E.g.
GRAPH.QUERY "your-project" "MATCH (n) return n"
To see some more advanced queries, check out the examples at pycograph.com
--project-dir
: The root directory of the Python project you want to analyze. If you omit this option, Pycograph will search for.py
files in your current working directory.--graph-name
: Specifies the name of the generated graph. Default: the name of the project directory.--overwrite
: If a graph with this name exists overwrite it. If you don't provide this flag, the new nodes and edges will be appended to the graph.--test-types
: Determine the types of tests based on the subdirectories of thetests
directory.--redis-host
: The host of the Redis instance. Default: localhost--redis-port
: The port of the Redis instance. Default: 6379--version
: Print Pycograph version and exit.
Pycograph is in beta version.
It creates a basic model with focus on the relationships betweeen the different parts of the code base. Even that model might be incomplete, ignoring some less common syntax. The goal is to provide some useful insight, not to create an exhaustive model.
If Pycograph finds a syntax error, it skips the module containing the syntax error and tries to build a model from the rest of the code base.
Below are some of the limitations. If you bump into other limitations, please open a GitHub issue.
The following imports will be ignored by Pycograph:
- imported external packages
import *
syntax- variables
- globals
- All the limitations of the imports.
- No support for
.py
files containing Jinja templates (e.g. cookiecutter) - Inner functions are ignored.
- ast module of the Python standard library for the abstract syntax tree
- Pydantic both for the models of the intermediate objects and for the settings
- redisgraph-py for creating the RedisGraph model
- typer for the command line interface
see the Contributing guide