Name | Graphinate JSON |
Version |
0.3.1
JSON |
| download |
home_page | None |
Summary | Graphinate. Data to Graphs. |
upload_time | 2024-10-17 19:03:37 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | None |
keywords |
declarative
graph
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
|
# [Graphinate. Data to Graphs.](https://erivlis.github.io/graphinate/)
<img height="360" src="https://github.com/erivlis/graphinate/assets/9897520/dae41f9f-69e5-4eb5-a488-87ce7f51fa32" alt="Graphinate. Data to Graphs.">
<table>
<tr style="vertical-align: middle;">
<td>Package</td>
<td>
<img alt="PyPI - version" src="https://img.shields.io/pypi/v/graphinate">
<img alt="PyPI - Status" src="https://img.shields.io/pypi/status/graphinate">
<img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/graphinate">
<img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dd/graphinate">
<br>
<img alt="GitHub" src="https://img.shields.io/github/license/erivlis/graphinate">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/erivlis/graphinate">
<img alt="GitHub last commit (by committer)" src="https://img.shields.io/github/last-commit/erivlis/graphinate">
<a href="https://github.com/erivlis/graphinate/graphs/contributors"><img alt="Contributors" src="https://img.shields.io/github/contributors/erivlis/graphinate.svg"></a>
</td>
</tr>
<tr>
<td>Tools</td>
<td>
<a href="https://www.jetbrains.com/pycharm/"><img alt="PyCharm" src="https://img.shields.io/badge/PyCharm-FCF84A.svg?logo=PyCharm&logoColor=black&labelColor=21D789&color=FCF84A"></a>
<a href="https://github.com/astral-sh/ruff"><img alt="ruff" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" style="max-width:100%;"></a>
<a href="https://github.com/astral-sh/uv"><img alt="uv" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" style="max-width:100%;"></a>
<a href="https://squidfunk.github.io/mkdocs-material/"><img alt="mkdocs-material" src="https://img.shields.io/badge/Material_for_MkDocs-526CFE?&logo=MaterialForMkDocs&logoColor=white&labelColor=grey"></a>
<a href="https://github.com/tox-dev/pipdeptree"><img alt="pipdeptree" src="https://img.shields.io/badge/pipdeptree-526CFE.svg?labelColor=gray&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADFElEQVR4nFxTW2tcVRRe39773E/mliZjwKRmhBaKt4BWRKmGgihCH3xUKNWC/Q/ii76IP8AHpSIiRfqmD5YKCinalhgiCMZLSVtMM0mTdDLTuZyZc9l7yTlp7WXBgXPW+fa31rfWtxU9FLMN79Crr028e+iJsZfb7fJMp23xRlOvbTR3L/y5cuOL3Vbv7/vxuPviecI/eWr6k/mj4+8AkM11y+zs2MKwMJvNgIgYINZX/rlx+tIvf72fZXr4P0EQyOCjjw98P9vwn8+/+z3Bq6sek7AJkNhsOjQcyjvFmHd2upd+PP/zsSxNI5mnPvjw8U9fPFJ9XVkgNuDVayEbcgVEfgikNfFg4JAmh1LyyfGq06QqE9vN6+fEs4fHnjv25vjbAOA4AsL2MVZ1hRcI4QXIH7ilMqQXkiYXRBJRbFNQnTsRlqfmxFvH66ccFyAQMxP3I5cqNZBSxIWcKORMO9g3yeSHzFkGbnVCIkDUZ+beEy+8VJ4XguC6TMPYokwrCAHUJsBxYptoFBYSMi0oLIlcAkuFYhal8Zl5VanZU0zErgfurufMFjEkWZ7iRFY4SlgYfW9bUIJKFQNjiNPYf1QZOZn/hTaStPQKTI4eDCxSjsL4I6BeJzOjgcnT0HqPqwBJCdHZjW/miWjkkG3hzqKIe5FVlM3llGuWqOxTDMBkWlJ/6PB2p0Sb21gXixdvLeTtDGOHLFvQHpkiYyTuNU5kuxJercTdpEK3Bz4yLdFrXVsQ33x1/bModjhvyrKKVXB/YD9gb8PgKAlolAZipmFTOIYcxq21Xz8XS5dbi+e+2zqbA3MjxYninH3PpkyZljwYjZE2FoxBIWm6YVHaW/k66qwtF05curz509OHHzvqBqWp232fE+2AoCjOXNMfhcRcjAxxoijNFNpbG0vL588cNzpLC4I00cnCD1fPBuVqffbA5DMGNjR5MOSBpC+UYxGE5G5PmNXff/vy4rdnTmRJHD1wG+9G42D9qVfeePLk/oONI8qv7+/2fbq11f53ZfnqhStLi6d3b67/cT/+vwAAAP//Xo5dwOtdLi4AAAAASUVORK5CYII="></a>
</td>
</tr>
<tr>
<td>CI/CD</td>
<td>
<a href="https://github.com/erivlis/graphinate/actions/workflows/test.yml"><img alt="Tests" src="https://github.com/erivlis/graphinate/actions/workflows/test.yml/badge.svg?branch=master"></a>
<a href="https://github.com/erivlis/graphinate/actions/workflows/publish.yml"><img alt="Publish" src="https://github.com/erivlis/graphinate/actions/workflows/publish.yml/badge.svg"></a>
<a href="https://github.com/erivlis/graphinate/actions/workflows/publish-docs.yaml"><img alt="Publish Docs" src="https://github.com/erivlis/graphinate/actions/workflows/publish-docs.yaml/badge.svg"></a>
</td>
</tr>
<tr>
<td>Scans</td>
<td>
<a href="https://codecov.io/gh/erivlis/graphinate"><img alt="Coverage" src="https://codecov.io/gh/erivlis/graphinate/graph/badge.svg?token=POODT8M9NV"/></a>
<br>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Quality Gate Status" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=alert_status"></a>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Security Rating" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=security_rating"></a>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Maintainability Rating" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=sqale_rating"></a>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Reliability Rating" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=reliability_rating"></a>
<br>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Lines of Code" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=ncloc"></a>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Vulnerabilities" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=vulnerabilities"></a>
<a href="https://sonarcloud.io/summary/new_code?id=erivlis_graphinate"><img alt="Bugs" src="https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=bugs"></a>
<br>
<a href="https://app.codacy.com/gh/erivlis/graphinate/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img alt="Codacy Badge" src="https://app.codacy.com/project/badge/Grade/54b33c3f7313448f9471d01e2a06f037"></a>
<a href="https://app.codacy.com/gh/erivlis/graphinate/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage"><img alt="Codacy Coverage" src="https://app.codacy.com/project/badge/Coverage/54b33c3f7313448f9471d01e2a06f037"/></a>
<a href="https://scrutinizer-ci.com/g/erivlis/graphinate"><img alt="Scrutinizer" src="https://scrutinizer-ci.com/g/erivlis/graphinate/badges/quality-score.png?b=main"></a>
<!--a href="https://snyk.io/test/github/erivlis/graphinate"><img alt="Snyk" src="https://snyk.io/test/github/erivlis/Graphinate/badge.svg"></a -->
</td>
</tr>
</table>
---------------------
## Introduction
### What is Graphinate?
**Graphinate** is a python library that aims to simplify the generation of Graph Data Structures from Data Sources.
It can help create an efficient retrieval pipeline from a given data source, while also enabling the developer to easily
map data payloads and hierarchies to a Graph.
In addition, there are several modes of output to enable examination of the Graph, and it's content.
**Graphinate** utilizes and builds upon the excellent [**_NetworkX_**](https://networkx.org/).
### Links
- Website (including documentation): <https://erivlis.github.io/graphinate>
- Source: <https://github.com/erivlis/graphinate>
- Package: <https://pypi.org/project/graphinate>
## Quick Start
### Install
**Graphinate** is available on PyPI:
```shell
pip install graphinate
```
To install with server support
```shell
pip install graphinate[server]
```
**Graphinate** officially supports Python >= 3.10.
### Example
```python
import graphinate
N: int = 8
# Define GraphModel
graph_model = graphinate.model(name="Octagonal Graph")
# Register edges supplier function
@graph_model.edge()
def edge():
for i in range(N - 1):
yield {'source': i, 'target': i + 1}
yield {'source': N - 1, 'target': 0}
# Materialize the GraphModel
graphinate.materialize(graph_model)
```
#### `graphinate.model` function
> [!NOTE]
> This function creates `GraphModel` class that is used to declaratively register _Edge_ and/or _Node_ data
> supplier functions by using the `GraphModel.node()` and `GraphModel.edge()` decorators.
#### `graphinate.materialize` function
> [!NOTE]
> This function can be used to easily generate an output from a `GraphModel` instance.
> By default, it will prompt the user to choose the output format, using a popup GUI dialog box.
## CLI
### Commands
```text
Usage: python -m graphinate [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
save
server
```
#### Save
```text
Usage: python -m graphinate save [OPTIONS]
Options:
-m, --model MODEL A GraphModel instance reference {module-
name}:{GraphModel-instance-variable-name} For example,
given var `model=GraphModel()` defined in app.py file,
then the reference should be app:model
--help Show this message and exit.
```
#### Server
```text
Usage: python -m graphinate server [OPTIONS]
Options:
-m, --model MODEL A GraphModel instance reference {module-
name}:{GraphModel-instance-variable-name} For example,
given var `model=GraphModel()` defined in app.py file,
then the reference should be app:model
-p, --port INTEGER Port number.
--help Show this message and exit.
```
## Gallery
### Python AST
![d3_graph_ast](https://github.com/erivlis/graphinate/assets/9897520/9e7e1ed2-3a5c-41fe-8c5f-999da4b741ff)
### GitHub Repository
![repo_graph](https://github.com/erivlis/graphinate/assets/9897520/9c044bbe-1f21-41b8-b879-95b8362ad48d)
### Python AST - 3D Force-Directed Animation
<video width="400" controls>
<source src="https://github.com/erivlis/graphinate/assets/9897520/2e9a53b1-5686-4683-a0e4-fbffa850a27b" type="video/mp4">
</video>
### Web Page Links
![Web Page Links](https://github.com/erivlis/graphinate/assets/9897520/ea5b00a2-75d1-4d0e-86af-272f20973149)
## Development
### Ruff
```shell
ruff check src
```
### Test
#### Standard (cobertura) XML Coverage Report
```shell
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=test_results.xml
```
#### HTML Coverage Report
```shell
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=test_results.xml
```
### Docs
#### test
```shell
python -m mkdocs serve
```
#### build
```shell
python -m mkdocs build
```
## Acknowledgements
### Dependencies
#### Python
<a href="https://palletsprojects.com/p/click/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://click.palletsprojects.com/en/7.x/_images/click-logo.png" alt="Click Logo."></a>
<a href="https://github.com/Delgan/loguru"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://raw.githubusercontent.com/Delgan/loguru/master/docs/_static/img/logo.png" alt="Loguru Logo."></a>
<a href="https://matplotlib.org/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://matplotlib.org/_static/logo_dark.svg" alt="matplotlib Logo."></a>
<a href="https://networkx.org/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://networkx.org/_static/networkx_logo.svg" alt="NetworkX Logo."></a>
<a href="https://strawberry.rocks/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://github.com/strawberry-graphql/strawberry/raw/main/.github/logo.png" alt="Strawberry GraphQL Logo."></a>
#### Javascript and HTML
<a href="https://vasturiano.github.io/3d-force-graph/"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="http://gist.github.com/vasturiano/02affe306ce445e423f992faeea13521/raw/preview.png" alt="3D Force-Directed Graph Logo."></a>
<a href="https://github.com/graphql-kit/graphql-voyager"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://github.com/graphql-kit/graphql-voyager/raw/main/docs/cover.png" alt="Graphql Voyager Logo."></a>
### Dev Tools
<a href="https://hatch.pypa.io/"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://hatch.pypa.io/latest/assets/images/logo.svg" alt="Hatch logo."></a>
<a href="https://squidfunk.github.io/mkdocs-material/"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/logo.svg" alt="Material for MkDocs"></a>
<a href="https://pytest.org"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://docs.pytest.org/en/7.4.x/_static/pytest_logo_curves.svg" alt="pytest logo."></a>
<a href="https://astral.sh/ruff"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://astralcms.wpengine.com/wp-content/uploads/2023/03/Ruff-Logo.svg" alt="Ruff logo."></a>
### IDE
<a href="https://www.jetbrains.com/pycharm/"><img height="60" style="background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo."></a>
---------------------
<img alt="Star Chart" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
Copyright © 2023 Eran Rivlis
Raw data
{
"_id": null,
"home_page": null,
"name": "Graphinate",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "declarative, graph",
"author": null,
"author_email": "Eran Rivlis <eran@rivlis.info>",
"download_url": "https://files.pythonhosted.org/packages/c6/bc/e6c2a7439c8083007f87564804e5b0a8fccda3e2d6b9b00d5c19a06ae709/graphinate-0.3.1.tar.gz",
"platform": null,
"description": "# [Graphinate. Data to Graphs.](https://erivlis.github.io/graphinate/)\n\n<img height=\"360\" src=\"https://github.com/erivlis/graphinate/assets/9897520/dae41f9f-69e5-4eb5-a488-87ce7f51fa32\" alt=\"Graphinate. Data to Graphs.\">\n\n<table>\n <tr style=\"vertical-align: middle;\">\n <td>Package</td>\n <td>\n <img alt=\"PyPI - version\" src=\"https://img.shields.io/pypi/v/graphinate\">\n <img alt=\"PyPI - Status\" src=\"https://img.shields.io/pypi/status/graphinate\">\n <img alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/graphinate\">\n <img alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dd/graphinate\">\n <br>\n <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/erivlis/graphinate\">\n <img alt=\"GitHub repo size\" src=\"https://img.shields.io/github/repo-size/erivlis/graphinate\">\n <img alt=\"GitHub last commit (by committer)\" src=\"https://img.shields.io/github/last-commit/erivlis/graphinate\">\n <a href=\"https://github.com/erivlis/graphinate/graphs/contributors\"><img alt=\"Contributors\" src=\"https://img.shields.io/github/contributors/erivlis/graphinate.svg\"></a>\n </td>\n </tr>\n <tr>\n <td>Tools</td>\n <td>\n <a href=\"https://www.jetbrains.com/pycharm/\"><img alt=\"PyCharm\" src=\"https://img.shields.io/badge/PyCharm-FCF84A.svg?logo=PyCharm&logoColor=black&labelColor=21D789&color=FCF84A\"></a>\n <a href=\"https://github.com/astral-sh/ruff\"><img alt=\"ruff\" src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" style=\"max-width:100%;\"></a>\n <a href=\"https://github.com/astral-sh/uv\"><img alt=\"uv\" src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json\" style=\"max-width:100%;\"></a>\n <a href=\"https://squidfunk.github.io/mkdocs-material/\"><img alt=\"mkdocs-material\" src=\"https://img.shields.io/badge/Material_for_MkDocs-526CFE?&logo=MaterialForMkDocs&logoColor=white&labelColor=grey\"></a>\n <a href=\"https://github.com/tox-dev/pipdeptree\"><img alt=\"pipdeptree\" src=\"https://img.shields.io/badge/pipdeptree-526CFE.svg?labelColor=gray&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADFElEQVR4nFxTW2tcVRRe39773E/mliZjwKRmhBaKt4BWRKmGgihCH3xUKNWC/Q/ii76IP8AHpSIiRfqmD5YKCinalhgiCMZLSVtMM0mTdDLTuZyZc9l7yTlp7WXBgXPW+fa31rfWtxU9FLMN79Crr028e+iJsZfb7fJMp23xRlOvbTR3L/y5cuOL3Vbv7/vxuPviecI/eWr6k/mj4+8AkM11y+zs2MKwMJvNgIgYINZX/rlx+tIvf72fZXr4P0EQyOCjjw98P9vwn8+/+z3Bq6sek7AJkNhsOjQcyjvFmHd2upd+PP/zsSxNI5mnPvjw8U9fPFJ9XVkgNuDVayEbcgVEfgikNfFg4JAmh1LyyfGq06QqE9vN6+fEs4fHnjv25vjbAOA4AsL2MVZ1hRcI4QXIH7ilMqQXkiYXRBJRbFNQnTsRlqfmxFvH66ccFyAQMxP3I5cqNZBSxIWcKORMO9g3yeSHzFkGbnVCIkDUZ+beEy+8VJ4XguC6TMPYokwrCAHUJsBxYptoFBYSMi0oLIlcAkuFYhal8Zl5VanZU0zErgfurufMFjEkWZ7iRFY4SlgYfW9bUIJKFQNjiNPYf1QZOZn/hTaStPQKTI4eDCxSjsL4I6BeJzOjgcnT0HqPqwBJCdHZjW/miWjkkG3hzqKIe5FVlM3llGuWqOxTDMBkWlJ/6PB2p0Sb21gXixdvLeTtDGOHLFvQHpkiYyTuNU5kuxJercTdpEK3Bz4yLdFrXVsQ33x1/bModjhvyrKKVXB/YD9gb8PgKAlolAZipmFTOIYcxq21Xz8XS5dbi+e+2zqbA3MjxYninH3PpkyZljwYjZE2FoxBIWm6YVHaW/k66qwtF05curz509OHHzvqBqWp232fE+2AoCjOXNMfhcRcjAxxoijNFNpbG0vL588cNzpLC4I00cnCD1fPBuVqffbA5DMGNjR5MOSBpC+UYxGE5G5PmNXff/vy4rdnTmRJHD1wG+9G42D9qVfeePLk/oONI8qv7+/2fbq11f53ZfnqhStLi6d3b67/cT/+vwAAAP//Xo5dwOtdLi4AAAAASUVORK5CYII=\"></a>\n </td>\n </tr>\n <tr>\n <td>CI/CD</td>\n <td>\n <a href=\"https://github.com/erivlis/graphinate/actions/workflows/test.yml\"><img alt=\"Tests\" src=\"https://github.com/erivlis/graphinate/actions/workflows/test.yml/badge.svg?branch=master\"></a>\n <a href=\"https://github.com/erivlis/graphinate/actions/workflows/publish.yml\"><img alt=\"Publish\" src=\"https://github.com/erivlis/graphinate/actions/workflows/publish.yml/badge.svg\"></a>\n <a href=\"https://github.com/erivlis/graphinate/actions/workflows/publish-docs.yaml\"><img alt=\"Publish Docs\" src=\"https://github.com/erivlis/graphinate/actions/workflows/publish-docs.yaml/badge.svg\"></a>\n </td>\n </tr>\n <tr>\n <td>Scans</td>\n <td>\n <a href=\"https://codecov.io/gh/erivlis/graphinate\"><img alt=\"Coverage\" src=\"https://codecov.io/gh/erivlis/graphinate/graph/badge.svg?token=POODT8M9NV\"/></a>\n <br>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Quality Gate Status\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=alert_status\"></a>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Security Rating\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=security_rating\"></a>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Maintainability Rating\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=sqale_rating\"></a>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Reliability Rating\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=reliability_rating\"></a>\n <br>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Lines of Code\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=ncloc\"></a>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Vulnerabilities\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=vulnerabilities\"></a>\n <a href=\"https://sonarcloud.io/summary/new_code?id=erivlis_graphinate\"><img alt=\"Bugs\" src=\"https://sonarcloud.io/api/project_badges/measure?project=erivlis_graphinate&metric=bugs\"></a>\n <br>\n <a href=\"https://app.codacy.com/gh/erivlis/graphinate/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade\"><img alt=\"Codacy Badge\" src=\"https://app.codacy.com/project/badge/Grade/54b33c3f7313448f9471d01e2a06f037\"></a>\n <a href=\"https://app.codacy.com/gh/erivlis/graphinate/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage\"><img alt=\"Codacy Coverage\" src=\"https://app.codacy.com/project/badge/Coverage/54b33c3f7313448f9471d01e2a06f037\"/></a>\n <a href=\"https://scrutinizer-ci.com/g/erivlis/graphinate\"><img alt=\"Scrutinizer\" src=\"https://scrutinizer-ci.com/g/erivlis/graphinate/badges/quality-score.png?b=main\"></a>\n <!--a href=\"https://snyk.io/test/github/erivlis/graphinate\"><img alt=\"Snyk\" src=\"https://snyk.io/test/github/erivlis/Graphinate/badge.svg\"></a -->\n </td>\n </tr>\n</table>\n\n---------------------\n\n## Introduction\n\n### What is Graphinate?\n\n**Graphinate** is a python library that aims to simplify the generation of Graph Data Structures from Data Sources.\n\nIt can help create an efficient retrieval pipeline from a given data source, while also enabling the developer to easily\nmap data payloads and hierarchies to a Graph.\n\nIn addition, there are several modes of output to enable examination of the Graph, and it's content.\n\n**Graphinate** utilizes and builds upon the excellent [**_NetworkX_**](https://networkx.org/).\n\n### Links\n\n- Website (including documentation): <https://erivlis.github.io/graphinate>\n- Source: <https://github.com/erivlis/graphinate>\n- Package: <https://pypi.org/project/graphinate>\n\n## Quick Start\n\n### Install\n\n**Graphinate** is available on PyPI:\n\n```shell\npip install graphinate\n```\n\nTo install with server support\n\n```shell\npip install graphinate[server]\n```\n\n**Graphinate** officially supports Python >= 3.10.\n\n### Example\n\n```python\nimport graphinate\n\nN: int = 8\n\n# Define GraphModel\ngraph_model = graphinate.model(name=\"Octagonal Graph\")\n\n\n# Register edges supplier function\n@graph_model.edge()\ndef edge():\n for i in range(N - 1):\n yield {'source': i, 'target': i + 1}\n yield {'source': N - 1, 'target': 0}\n\n\n# Materialize the GraphModel\ngraphinate.materialize(graph_model)\n```\n\n\n\n#### `graphinate.model` function\n\n> [!NOTE]\n> This function creates `GraphModel` class that is used to declaratively register _Edge_ and/or _Node_ data\n> supplier functions by using the `GraphModel.node()` and `GraphModel.edge()` decorators.\n\n#### `graphinate.materialize` function\n\n> [!NOTE]\n> This function can be used to easily generate an output from a `GraphModel` instance.\n> By default, it will prompt the user to choose the output format, using a popup GUI dialog box.\n\n## CLI\n\n### Commands\n\n```text\nUsage: python -m graphinate [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n save\n server\n```\n\n#### Save\n\n```text\nUsage: python -m graphinate save [OPTIONS]\n\nOptions:\n -m, --model MODEL A GraphModel instance reference {module-\n name}:{GraphModel-instance-variable-name} For example,\n given var `model=GraphModel()` defined in app.py file,\n then the reference should be app:model\n --help Show this message and exit.\n```\n\n#### Server\n\n```text\nUsage: python -m graphinate server [OPTIONS]\n\nOptions:\n -m, --model MODEL A GraphModel instance reference {module-\n name}:{GraphModel-instance-variable-name} For example,\n given var `model=GraphModel()` defined in app.py file,\n then the reference should be app:model\n -p, --port INTEGER Port number.\n --help Show this message and exit.\n```\n\n## Gallery\n\n### Python AST\n\n![d3_graph_ast](https://github.com/erivlis/graphinate/assets/9897520/9e7e1ed2-3a5c-41fe-8c5f-999da4b741ff)\n\n### GitHub Repository\n\n![repo_graph](https://github.com/erivlis/graphinate/assets/9897520/9c044bbe-1f21-41b8-b879-95b8362ad48d)\n\n### Python AST - 3D Force-Directed Animation\n\n<video width=\"400\" controls>\n <source src=\"https://github.com/erivlis/graphinate/assets/9897520/2e9a53b1-5686-4683-a0e4-fbffa850a27b\" type=\"video/mp4\">\n</video>\n\n### Web Page Links\n\n![Web Page Links](https://github.com/erivlis/graphinate/assets/9897520/ea5b00a2-75d1-4d0e-86af-272f20973149)\n\n## Development\n\n### Ruff\n\n```shell\nruff check src\n```\n\n### Test\n\n#### Standard (cobertura) XML Coverage Report\n\n```shell\n python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=test_results.xml\n```\n\n#### HTML Coverage Report\n\n```shell\npython -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=test_results.xml\n```\n\n### Docs\n\n#### test\n\n```shell\npython -m mkdocs serve\n```\n\n#### build\n\n```shell\npython -m mkdocs build\n```\n\n## Acknowledgements\n\n### Dependencies\n\n#### Python\n\n<a href=\"https://palletsprojects.com/p/click/\"><img height=\"60\" style=\"padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://click.palletsprojects.com/en/7.x/_images/click-logo.png\" alt=\"Click Logo.\"></a>\n<a href=\"https://github.com/Delgan/loguru\"><img height=\"60\" style=\"padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://raw.githubusercontent.com/Delgan/loguru/master/docs/_static/img/logo.png\" alt=\"Loguru Logo.\"></a>\n<a href=\"https://matplotlib.org/\"><img height=\"60\" style=\"padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://matplotlib.org/_static/logo_dark.svg\" alt=\"matplotlib Logo.\"></a>\n<a href=\"https://networkx.org/\"><img height=\"60\" style=\"padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://networkx.org/_static/networkx_logo.svg\" alt=\"NetworkX Logo.\"></a>\n<a href=\"https://strawberry.rocks/\"><img height=\"60\" style=\"padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://github.com/strawberry-graphql/strawberry/raw/main/.github/logo.png\" alt=\"Strawberry GraphQL Logo.\"></a>\n\n#### Javascript and HTML\n\n<a href=\"https://vasturiano.github.io/3d-force-graph/\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"http://gist.github.com/vasturiano/02affe306ce445e423f992faeea13521/raw/preview.png\" alt=\"3D Force-Directed Graph Logo.\"></a>\n<a href=\"https://github.com/graphql-kit/graphql-voyager\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://github.com/graphql-kit/graphql-voyager/raw/main/docs/cover.png\" alt=\"Graphql Voyager Logo.\"></a>\n\n### Dev Tools\n\n<a href=\"https://hatch.pypa.io/\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://hatch.pypa.io/latest/assets/images/logo.svg\" alt=\"Hatch logo.\"></a>\n<a href=\"https://squidfunk.github.io/mkdocs-material/\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/logo.svg\" alt=\"Material for MkDocs\"></a>\n<a href=\"https://pytest.org\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://docs.pytest.org/en/7.4.x/_static/pytest_logo_curves.svg\" alt=\"pytest logo.\"></a>\n<a href=\"https://astral.sh/ruff\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);\" src=\"https://astralcms.wpengine.com/wp-content/uploads/2023/03/Ruff-Logo.svg\" alt=\"Ruff logo.\"></a>\n\n### IDE\n\n<a href=\"https://www.jetbrains.com/pycharm/\"><img height=\"60\" style=\"background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png\" alt=\"PyCharm logo.\"></a>\n\n---------------------\n\n<img alt=\"Star Chart\" src=\"https://forthebadge.com/images/badges/works-on-my-machine.svg\">\n\nCopyright \u00a9 2023 Eran Rivlis\n",
"bugtrack_url": null,
"license": null,
"summary": "Graphinate. Data to Graphs.",
"version": "0.3.1",
"project_urls": {
"Bug Tracker": "https://github.com/erivlis/graphinate/issues",
"Documentation": "https://erivlis.github.io/graphinate",
"Homepage": "https://erivlis.github.io/graphinate",
"Source": "https://github.com/erivlis/graphinate"
},
"split_keywords": [
"declarative",
" graph"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b9955cc06ff10efc1409b626855274e51c82f27967d4d026afbb041ed93b252c",
"md5": "cf8ec6b1871d21c6021f101dcf254d92",
"sha256": "d1734d14a163848dad4aed99f688cd57941591cead66791670be9dfacb4109f9"
},
"downloads": -1,
"filename": "graphinate-0.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cf8ec6b1871d21c6021f101dcf254d92",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 106376,
"upload_time": "2024-10-17T19:03:35",
"upload_time_iso_8601": "2024-10-17T19:03:35.901556Z",
"url": "https://files.pythonhosted.org/packages/b9/95/5cc06ff10efc1409b626855274e51c82f27967d4d026afbb041ed93b252c/graphinate-0.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c6bce6c2a7439c8083007f87564804e5b0a8fccda3e2d6b9b00d5c19a06ae709",
"md5": "f719690e8ab21407042840060c50c71a",
"sha256": "3bbc32a1eb4a3e72db11446c00b4be33990c5de2d22813b9ecd28a3a727b71d0"
},
"downloads": -1,
"filename": "graphinate-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "f719690e8ab21407042840060c50c71a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 317600,
"upload_time": "2024-10-17T19:03:37",
"upload_time_iso_8601": "2024-10-17T19:03:37.708964Z",
"url": "https://files.pythonhosted.org/packages/c6/bc/e6c2a7439c8083007f87564804e5b0a8fccda3e2d6b9b00d5c19a06ae709/graphinate-0.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-17 19:03:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "erivlis",
"github_project": "graphinate",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "graphinate"
}