Graphinate 0.2.15__tar.gz → 0.2.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/publish-docs.yaml +9 -6
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/publish.yml +1 -1
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/test-beta.yml +1 -1
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/test.yml +1 -1
- {graphinate-0.2.15 → graphinate-0.2.17}/PKG-INFO +10 -11
- {graphinate-0.2.15 → graphinate-0.2.17}/README.md +6 -4
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/acknowledge.md +1 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/index.md +6 -4
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/math/polygonal_graph.py +2 -2
- {graphinate-0.2.15 → graphinate-0.2.17}/pyproject.toml +4 -8
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/builders.py +5 -8
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/graphiql/index.html +2 -2
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/viewer/index.html +9 -7
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/voyager/index.html +1 -1
- {graphinate-0.2.15 → graphinate-0.2.17}/.coveragerc +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/dependabot.yml +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/codeql.yml +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/.gitignore +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/LICENSE +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/STATS.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/images/logo-128.png +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/images/network_graph.png +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/stylesheets/extra.css +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/dev.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/code.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/github.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/math.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/web.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/gen_ref_pages.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/intro.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/start.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/usage/cli.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/docs/usage/lib.md +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/python_ast.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/python_dependencies.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/requirements.txt +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/_client.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/commits_visibilty_graph.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/followers.graphql +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/followers.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/graphql.config.yml +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/repositories.graphql +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/repositories.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/requirements.txt +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/math/graph_atlas.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/web/page_links.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/examples/web/requirements.txt +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/mkdocs.yml +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/ethernet/traceroute.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/genric_graph.graphql +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/graphql.config.yml +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/house_of_graphs.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/social/albums.json +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/social/musicisians.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/text/nlp_graph.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/text/requirements.txt +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/time_series/requirements.txt +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/playground/time_series/visibility_graph.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/sonar-project.properties +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/__main__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/cli.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/color.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/materializers/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/materializers/matplotlib.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/modeling.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/starlette/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/starlette/views.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/elements/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/elements/index.html +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/graphiql/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/rapidoc/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/rapidoc/index.html +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/logo-128.png +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/network_graph.png +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/viewer/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/voyager/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/__init__.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/converters.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/gui.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/mutators.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/typing.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/conftest.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_builders.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_cli.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_color.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_materializers.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_modeling.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_server.py +0 -0
- {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_tools.py +0 -0
|
@@ -10,17 +10,20 @@ jobs:
|
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@v4
|
|
13
|
-
- uses: actions/setup-python@
|
|
13
|
+
- uses: actions/setup-python@v5
|
|
14
14
|
with:
|
|
15
15
|
python-version: 3.x
|
|
16
16
|
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
|
17
|
-
- uses: actions/cache@
|
|
17
|
+
- uses: actions/cache@v4
|
|
18
18
|
with:
|
|
19
19
|
key: mkdocs-material-${{ env.cache_id }}
|
|
20
20
|
path: .cache
|
|
21
21
|
restore-keys: |
|
|
22
22
|
mkdocs-material-
|
|
23
|
-
- run:
|
|
24
|
-
pip install
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
- run: |
|
|
24
|
+
python -m pip install pip --upgrade
|
|
25
|
+
pip install uv
|
|
26
|
+
uv venv
|
|
27
|
+
source .venv/bin/activate
|
|
28
|
+
uv pip install mkdocs-material mkdocstrings-python mkdocs-git-revision-date-localized-plugin mkdocs-gen-files mkdocs-glightbox mkdocs-literate-nav mkdocs-section-index
|
|
29
|
+
mkdocs gh-deploy --force
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Graphinate
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17
|
|
4
4
|
Summary: Graphinate. Data to Graphs.
|
|
5
5
|
Project-URL: Homepage, https://erivlis.github.io/graphinate
|
|
6
6
|
Project-URL: Documentation, https://erivlis.github.io/graphinate
|
|
@@ -32,10 +32,7 @@ Requires-Dist: inflect==7.0.0
|
|
|
32
32
|
Requires-Dist: loguru==0.7.2
|
|
33
33
|
Requires-Dist: matplotlib==3.8.3
|
|
34
34
|
Requires-Dist: networkx==3.2.1
|
|
35
|
-
Requires-Dist: strawberry-graphql[asgi,opentelemetry]==0.
|
|
36
|
-
Provides-Extra: dbs
|
|
37
|
-
Requires-Dist: neo4j>=5.17.0; extra == 'dbs'
|
|
38
|
-
Requires-Dist: pydgraph>=23.0.2; extra == 'dbs'
|
|
35
|
+
Requires-Dist: strawberry-graphql[asgi,opentelemetry]==0.220.0
|
|
39
36
|
Provides-Extra: dev
|
|
40
37
|
Requires-Dist: pipdeptree; extra == 'dev'
|
|
41
38
|
Requires-Dist: ruff; extra == 'dev'
|
|
@@ -54,11 +51,11 @@ Requires-Dist: starlette-prometheus; extra == 'server'
|
|
|
54
51
|
Requires-Dist: uvicorn[standard]>=0.27.0; extra == 'server'
|
|
55
52
|
Provides-Extra: test
|
|
56
53
|
Requires-Dist: faker>=23.2.1; extra == 'test'
|
|
57
|
-
Requires-Dist: pytest-asyncio>=0.23.
|
|
54
|
+
Requires-Dist: pytest-asyncio>=0.23.5; extra == 'test'
|
|
58
55
|
Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
|
|
59
56
|
Requires-Dist: pytest-randomly>=3.15.0; extra == 'test'
|
|
60
57
|
Requires-Dist: pytest-xdist>=3.5.0; extra == 'test'
|
|
61
|
-
Requires-Dist: pytest>=
|
|
58
|
+
Requires-Dist: pytest>=8.1.1; extra == 'test'
|
|
62
59
|
Description-Content-Type: text/markdown
|
|
63
60
|
|
|
64
61
|
# [Graphinate. Data to Graphs.](https://erivlis.github.io/graphinate/)
|
|
@@ -78,14 +75,16 @@ Description-Content-Type: text/markdown
|
|
|
78
75
|
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/erivlis/graphinate">
|
|
79
76
|
<img alt="GitHub last commit (by committer)" src="https://img.shields.io/github/last-commit/erivlis/graphinate">
|
|
80
77
|
<a href="https://github.com/erivlis/graphinate/graphs/contributors"><img alt="Contributors" src="https://img.shields.io/github/contributors/erivlis/graphinate.svg"></a>
|
|
81
|
-
<img alt="GitHub Watchers" src="https://img.shields.io/github/watchers/erivlis/graphinate.svg">
|
|
82
78
|
</td>
|
|
83
79
|
</tr>
|
|
84
80
|
<tr>
|
|
85
81
|
<td>Tools</td>
|
|
86
82
|
<td>
|
|
87
|
-
<img alt="
|
|
83
|
+
<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>
|
|
88
84
|
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;"></a>
|
|
85
|
+
<a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv" style="max-width:100%;"></a>
|
|
86
|
+
<a href="https://squidfunk.github.io/mkdocs-material/"><img src="https://img.shields.io/badge/Material_for_MkDocs-526CFE?&logo=MaterialForMkDocs&logoColor=white&labelColor=grey"></a>
|
|
87
|
+
<a href="https://github.com/tox-dev/pipdeptree"><img 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>
|
|
89
88
|
</td>
|
|
90
89
|
</tr>
|
|
91
90
|
<tr>
|
|
@@ -170,9 +169,9 @@ graph_model = graphinate.model(name="Octagonal Graph")
|
|
|
170
169
|
# Register edges supplier function
|
|
171
170
|
@graph_model.edge()
|
|
172
171
|
def edge():
|
|
173
|
-
for i in range(N):
|
|
172
|
+
for i in range(N - 1):
|
|
174
173
|
yield {'source': i, 'target': i + 1}
|
|
175
|
-
yield {'source': N, 'target': 0}
|
|
174
|
+
yield {'source': N - 1, 'target': 0}
|
|
176
175
|
|
|
177
176
|
|
|
178
177
|
# Materialize the GraphModel
|
|
@@ -15,14 +15,16 @@
|
|
|
15
15
|
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/erivlis/graphinate">
|
|
16
16
|
<img alt="GitHub last commit (by committer)" src="https://img.shields.io/github/last-commit/erivlis/graphinate">
|
|
17
17
|
<a href="https://github.com/erivlis/graphinate/graphs/contributors"><img alt="Contributors" src="https://img.shields.io/github/contributors/erivlis/graphinate.svg"></a>
|
|
18
|
-
<img alt="GitHub Watchers" src="https://img.shields.io/github/watchers/erivlis/graphinate.svg">
|
|
19
18
|
</td>
|
|
20
19
|
</tr>
|
|
21
20
|
<tr>
|
|
22
21
|
<td>Tools</td>
|
|
23
22
|
<td>
|
|
24
|
-
<img alt="
|
|
23
|
+
<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>
|
|
25
24
|
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;"></a>
|
|
25
|
+
<a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv" style="max-width:100%;"></a>
|
|
26
|
+
<a href="https://squidfunk.github.io/mkdocs-material/"><img src="https://img.shields.io/badge/Material_for_MkDocs-526CFE?&logo=MaterialForMkDocs&logoColor=white&labelColor=grey"></a>
|
|
27
|
+
<a href="https://github.com/tox-dev/pipdeptree"><img 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>
|
|
26
28
|
</td>
|
|
27
29
|
</tr>
|
|
28
30
|
<tr>
|
|
@@ -107,9 +109,9 @@ graph_model = graphinate.model(name="Octagonal Graph")
|
|
|
107
109
|
# Register edges supplier function
|
|
108
110
|
@graph_model.edge()
|
|
109
111
|
def edge():
|
|
110
|
-
for i in range(N):
|
|
112
|
+
for i in range(N - 1):
|
|
111
113
|
yield {'source': i, 'target': i + 1}
|
|
112
|
-
yield {'source': N, 'target': 0}
|
|
114
|
+
yield {'source': N - 1, 'target': 0}
|
|
113
115
|
|
|
114
116
|
|
|
115
117
|
# Materialize the GraphModel
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
<a href="https://squidfunk.github.io/mkdocs-material/"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/logo.svg" alt="Material for MkDocs"></a>
|
|
22
22
|
<a href="https://pytest.org"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://docs.pytest.org/en/7.4.x/_static/pytest_logo_curves.svg" alt="pytest logo."></a>
|
|
23
23
|
<a href="https://astral.sh/ruff"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://astralcms.wpengine.com/wp-content/uploads/2023/03/Ruff-Logo.svg" alt="Ruff logo."></a>
|
|
24
|
+
<a href="https://astral.sh/uv"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://avatars.githubusercontent.com/u/115962839" alt="uv logo."></a>
|
|
24
25
|
|
|
25
26
|
## IDE
|
|
26
27
|
|
|
@@ -17,14 +17,16 @@
|
|
|
17
17
|
<img alt="GitHub Watchers" src="https://img.shields.io/github/watchers/erivlis/graphinate.svg">
|
|
18
18
|
</td>
|
|
19
19
|
</tr>
|
|
20
|
-
<tr>
|
|
20
|
+
<tr style="vertical-align: middle; border-width: 0;">
|
|
21
21
|
<td>Tools</td>
|
|
22
22
|
<td>
|
|
23
|
-
<img alt="
|
|
23
|
+
<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>
|
|
24
24
|
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;"></a>
|
|
25
|
+
<a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv" style="max-width:100%;"></a>
|
|
26
|
+
<a href="https://github.com/tox-dev/pipdeptree"><img 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>
|
|
25
27
|
</td>
|
|
26
28
|
</tr>
|
|
27
|
-
<tr>
|
|
29
|
+
<tr style="vertical-align: middle; border-width: 0;">
|
|
28
30
|
<td>CI/CD</td>
|
|
29
31
|
<td>
|
|
30
32
|
<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>
|
|
@@ -32,7 +34,7 @@
|
|
|
32
34
|
<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>
|
|
33
35
|
</td>
|
|
34
36
|
</tr>
|
|
35
|
-
<tr>
|
|
37
|
+
<tr style="vertical-align: middle; border-width: 0;">
|
|
36
38
|
<td>Scans</td>
|
|
37
39
|
<td>
|
|
38
40
|
<a href="https://codecov.io/gh/erivlis/graphinate"><img alt="Coverage" src="https://codecov.io/gh/erivlis/graphinate/graph/badge.svg?token=POODT8M9NV"/></a>
|
|
@@ -12,9 +12,9 @@ def get_graph_model(number_of_sides: int = N):
|
|
|
12
12
|
# Register edges supplier function
|
|
13
13
|
@graph_model.edge()
|
|
14
14
|
def edge():
|
|
15
|
-
for i in range(number_of_sides):
|
|
15
|
+
for i in range(number_of_sides - 1):
|
|
16
16
|
yield {'source': i, 'target': i + 1}
|
|
17
|
-
yield {'source': number_of_sides, 'target': 0}
|
|
17
|
+
yield {'source': number_of_sides - 1, 'target': 0}
|
|
18
18
|
|
|
19
19
|
return graph_model
|
|
20
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "Graphinate"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.17"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name = "Eran Rivlis", email = "eran@rivlis.info" },
|
|
6
6
|
]
|
|
@@ -33,7 +33,7 @@ dependencies = [
|
|
|
33
33
|
"loguru==0.7.2",
|
|
34
34
|
"matplotlib==3.8.3",
|
|
35
35
|
"networkx==3.2.1",
|
|
36
|
-
"strawberry-graphql[asgi,opentelemetry]==0.
|
|
36
|
+
"strawberry-graphql[asgi,opentelemetry]==0.220.0"
|
|
37
37
|
]
|
|
38
38
|
|
|
39
39
|
|
|
@@ -60,16 +60,12 @@ docs = [
|
|
|
60
60
|
]
|
|
61
61
|
test = [
|
|
62
62
|
"faker>=23.2.1",
|
|
63
|
-
"pytest>=
|
|
64
|
-
"pytest-asyncio>=0.23.
|
|
63
|
+
"pytest>=8.1.1",
|
|
64
|
+
"pytest-asyncio>=0.23.5",
|
|
65
65
|
"pytest-cov>=4.1.0",
|
|
66
66
|
"pytest-randomly>=3.15.0",
|
|
67
67
|
"pytest-xdist>=3.5.0"
|
|
68
68
|
]
|
|
69
|
-
dbs = [
|
|
70
|
-
"pydgraph>=23.0.2",
|
|
71
|
-
"neo4j>=5.17.0"
|
|
72
|
-
]
|
|
73
69
|
plot = [
|
|
74
70
|
"scipy>=1.12.0"
|
|
75
71
|
]
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Build classes that can generate graph data structures from a GraphModel
|
|
3
3
|
"""
|
|
4
4
|
import base64
|
|
5
|
-
import decimal
|
|
6
5
|
import functools
|
|
7
6
|
import gzip
|
|
8
7
|
import importlib
|
|
@@ -17,7 +16,7 @@ from collections.abc import Hashable, Mapping
|
|
|
17
16
|
from datetime import datetime
|
|
18
17
|
from enum import Enum
|
|
19
18
|
from types import MappingProxyType
|
|
20
|
-
from typing import Any, Callable,
|
|
19
|
+
from typing import Any, Callable, Optional, Union
|
|
21
20
|
|
|
22
21
|
import inflect
|
|
23
22
|
import networkx as nx
|
|
@@ -33,6 +32,8 @@ from .typing import NodeTypeAbsoluteId
|
|
|
33
32
|
DEFAULT_NODE_DELIMITER = ' ∋ '
|
|
34
33
|
DEFAULT_EDGE_DELIMITER = ' ↔ '
|
|
35
34
|
|
|
35
|
+
GraphRepresentation = Union[dict, nx.Graph, strawberry.Schema]
|
|
36
|
+
|
|
36
37
|
|
|
37
38
|
def label_converter(value, delimiter: str):
|
|
38
39
|
if value:
|
|
@@ -102,9 +103,6 @@ class GraphType(Enum):
|
|
|
102
103
|
MultiGraph = nx.MultiGraph
|
|
103
104
|
|
|
104
105
|
|
|
105
|
-
GraphRepresentation = Union[dict, nx.Graph, strawberry.Schema]
|
|
106
|
-
|
|
107
|
-
|
|
108
106
|
class Builder(ABC):
|
|
109
107
|
"""Builder abstract base class"""
|
|
110
108
|
|
|
@@ -175,9 +173,8 @@ class NetworkxBuilder(Builder):
|
|
|
175
173
|
if k[:-3] == node_type_absolute_id[1]:
|
|
176
174
|
break
|
|
177
175
|
ids.append(v)
|
|
178
|
-
return tuple(ids)
|
|
179
176
|
|
|
180
|
-
|
|
177
|
+
return tuple(ids)
|
|
181
178
|
|
|
182
179
|
def _populate_nodes(self, node_type_absolute_id: NodeTypeAbsoluteId, **kwargs):
|
|
183
180
|
node_model = self.model.node_models[node_type_absolute_id]
|
|
@@ -591,7 +588,7 @@ class GraphQLBuilder(NetworkxBuilder):
|
|
|
591
588
|
# inflect engine to generate Plurals when needed
|
|
592
589
|
inflection = inflect.engine()
|
|
593
590
|
|
|
594
|
-
# local reference to instance fields
|
|
591
|
+
# local reference to instance fields used to "inject" into dynamically generated class methods
|
|
595
592
|
def get_graph():
|
|
596
593
|
return self._graph
|
|
597
594
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
|
-
<title>
|
|
4
|
+
<title>Graphinate - GraphiQL</title>
|
|
5
5
|
<style>
|
|
6
6
|
body {
|
|
7
7
|
height: 100%;
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
ReactDOM.
|
|
154
|
+
ReactDOM.createRenderRoot(
|
|
155
155
|
React.createElement(GraphiQLWithExplorer),
|
|
156
156
|
document.getElementById("graphiql")
|
|
157
157
|
);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
+
<html lang="">
|
|
2
3
|
<head>
|
|
3
|
-
<title
|
|
4
|
+
<title>Graphinate</title>
|
|
4
5
|
<style> body { margin: 0; } </style>
|
|
5
6
|
<script src="https://cdn.jsdelivr.net/npm/3d-force-graph@1.72.3/dist/3d-force-graph.min.js"
|
|
6
7
|
integrity="sha384-oGNXGez54SiNIIRSFWGVG0UJ9MIswOOsd/MbPZVNZFy+ykbIp1A7Ge5liZVo5oQK"
|
|
@@ -41,7 +42,7 @@ fragment Details on GraphElement {
|
|
|
41
42
|
body: JSON.stringify(payload),
|
|
42
43
|
credentials: 'include',
|
|
43
44
|
}).then((response) => response.json());
|
|
44
|
-
}
|
|
45
|
+
}
|
|
45
46
|
|
|
46
47
|
fetchGraphQL({query: graphQuery})
|
|
47
48
|
.then((responseJson) => responseJson.data)
|
|
@@ -51,13 +52,14 @@ fragment Details on GraphElement {
|
|
|
51
52
|
const Graph = ForceGraph3D()(document.getElementById('3d-graph'))
|
|
52
53
|
.graphData(gData)
|
|
53
54
|
.nodeColor('color')
|
|
54
|
-
<!-- .nodeAutoColorBy('type')-->
|
|
55
|
+
// <!-- .nodeAutoColorBy('type')-->
|
|
55
56
|
.nodeLabel(node => `${node.type}: '${node.name}'`)
|
|
56
|
-
<!-- .linkDirectionalArrowLength(3.5)-->
|
|
57
|
-
<!-- .linkDirectionalArrowRelPos(1)-->
|
|
58
|
-
<!-- .linkCurvature(0.0)-->
|
|
57
|
+
// <!-- .linkDirectionalArrowLength(3.5)-->
|
|
58
|
+
// <!-- .linkDirectionalArrowRelPos(1)-->
|
|
59
|
+
// <!-- .linkCurvature(0.0)-->
|
|
59
60
|
.onEngineStop(() => Graph.zoomToFit(400));
|
|
60
61
|
});
|
|
61
62
|
|
|
62
63
|
</script>
|
|
63
|
-
</body>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/logo-128.png
RENAMED
|
File without changes
|
{graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/network_graph.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|