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.
Files changed (92) hide show
  1. {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/publish-docs.yaml +9 -6
  2. {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/publish.yml +1 -1
  3. {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/test-beta.yml +1 -1
  4. {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/test.yml +1 -1
  5. {graphinate-0.2.15 → graphinate-0.2.17}/PKG-INFO +10 -11
  6. {graphinate-0.2.15 → graphinate-0.2.17}/README.md +6 -4
  7. {graphinate-0.2.15 → graphinate-0.2.17}/docs/acknowledge.md +1 -0
  8. {graphinate-0.2.15 → graphinate-0.2.17}/docs/index.md +6 -4
  9. {graphinate-0.2.15 → graphinate-0.2.17}/examples/math/polygonal_graph.py +2 -2
  10. {graphinate-0.2.15 → graphinate-0.2.17}/pyproject.toml +4 -8
  11. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/builders.py +5 -8
  12. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/graphiql/index.html +2 -2
  13. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/viewer/index.html +9 -7
  14. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/voyager/index.html +1 -1
  15. {graphinate-0.2.15 → graphinate-0.2.17}/.coveragerc +0 -0
  16. {graphinate-0.2.15 → graphinate-0.2.17}/.github/dependabot.yml +0 -0
  17. {graphinate-0.2.15 → graphinate-0.2.17}/.github/workflows/codeql.yml +0 -0
  18. {graphinate-0.2.15 → graphinate-0.2.17}/.gitignore +0 -0
  19. {graphinate-0.2.15 → graphinate-0.2.17}/LICENSE +0 -0
  20. {graphinate-0.2.15 → graphinate-0.2.17}/STATS.md +0 -0
  21. {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/images/logo-128.png +0 -0
  22. {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/images/network_graph.png +0 -0
  23. {graphinate-0.2.15 → graphinate-0.2.17}/docs/assets/stylesheets/extra.css +0 -0
  24. {graphinate-0.2.15 → graphinate-0.2.17}/docs/dev.md +0 -0
  25. {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/code.md +0 -0
  26. {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/github.md +0 -0
  27. {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/math.md +0 -0
  28. {graphinate-0.2.15 → graphinate-0.2.17}/docs/examples/web.md +0 -0
  29. {graphinate-0.2.15 → graphinate-0.2.17}/docs/gen_ref_pages.py +0 -0
  30. {graphinate-0.2.15 → graphinate-0.2.17}/docs/intro.md +0 -0
  31. {graphinate-0.2.15 → graphinate-0.2.17}/docs/start.md +0 -0
  32. {graphinate-0.2.15 → graphinate-0.2.17}/docs/usage/cli.md +0 -0
  33. {graphinate-0.2.15 → graphinate-0.2.17}/docs/usage/lib.md +0 -0
  34. {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/python_ast.py +0 -0
  35. {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/python_dependencies.py +0 -0
  36. {graphinate-0.2.15 → graphinate-0.2.17}/examples/code/requirements.txt +0 -0
  37. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/_client.py +0 -0
  38. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/commits_visibilty_graph.py +0 -0
  39. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/followers.graphql +0 -0
  40. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/followers.py +0 -0
  41. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/graphql.config.yml +0 -0
  42. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/repositories.graphql +0 -0
  43. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/repositories.py +0 -0
  44. {graphinate-0.2.15 → graphinate-0.2.17}/examples/github/requirements.txt +0 -0
  45. {graphinate-0.2.15 → graphinate-0.2.17}/examples/math/graph_atlas.py +0 -0
  46. {graphinate-0.2.15 → graphinate-0.2.17}/examples/web/page_links.py +0 -0
  47. {graphinate-0.2.15 → graphinate-0.2.17}/examples/web/requirements.txt +0 -0
  48. {graphinate-0.2.15 → graphinate-0.2.17}/mkdocs.yml +0 -0
  49. {graphinate-0.2.15 → graphinate-0.2.17}/playground/ethernet/traceroute.py +0 -0
  50. {graphinate-0.2.15 → graphinate-0.2.17}/playground/genric_graph.graphql +0 -0
  51. {graphinate-0.2.15 → graphinate-0.2.17}/playground/graphql.config.yml +0 -0
  52. {graphinate-0.2.15 → graphinate-0.2.17}/playground/house_of_graphs.py +0 -0
  53. {graphinate-0.2.15 → graphinate-0.2.17}/playground/social/albums.json +0 -0
  54. {graphinate-0.2.15 → graphinate-0.2.17}/playground/social/musicisians.py +0 -0
  55. {graphinate-0.2.15 → graphinate-0.2.17}/playground/text/nlp_graph.py +0 -0
  56. {graphinate-0.2.15 → graphinate-0.2.17}/playground/text/requirements.txt +0 -0
  57. {graphinate-0.2.15 → graphinate-0.2.17}/playground/time_series/requirements.txt +0 -0
  58. {graphinate-0.2.15 → graphinate-0.2.17}/playground/time_series/visibility_graph.py +0 -0
  59. {graphinate-0.2.15 → graphinate-0.2.17}/sonar-project.properties +0 -0
  60. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/__init__.py +0 -0
  61. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/__main__.py +0 -0
  62. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/cli.py +0 -0
  63. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/color.py +0 -0
  64. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/materializers/__init__.py +0 -0
  65. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/materializers/matplotlib.py +0 -0
  66. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/modeling.py +0 -0
  67. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/__init__.py +0 -0
  68. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/starlette/__init__.py +0 -0
  69. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/starlette/views.py +0 -0
  70. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/__init__.py +0 -0
  71. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/elements/__init__.py +0 -0
  72. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/elements/index.html +0 -0
  73. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/graphiql/__init__.py +0 -0
  74. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/rapidoc/__init__.py +0 -0
  75. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/rapidoc/index.html +0 -0
  76. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/logo-128.png +0 -0
  77. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/static/images/network_graph.png +0 -0
  78. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/viewer/__init__.py +0 -0
  79. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/server/web/voyager/__init__.py +0 -0
  80. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/__init__.py +0 -0
  81. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/converters.py +0 -0
  82. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/gui.py +0 -0
  83. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/tools/mutators.py +0 -0
  84. {graphinate-0.2.15 → graphinate-0.2.17}/src/graphinate/typing.py +0 -0
  85. {graphinate-0.2.15 → graphinate-0.2.17}/tests/conftest.py +0 -0
  86. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_builders.py +0 -0
  87. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_cli.py +0 -0
  88. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_color.py +0 -0
  89. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_materializers.py +0 -0
  90. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_modeling.py +0 -0
  91. {graphinate-0.2.15 → graphinate-0.2.17}/tests/graphinate/test_server.py +0 -0
  92. {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@v4
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@v3
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 mkdocs-material mkdocstrings-python mkdocs-git-revision-date-localized-plugin mkdocs-gen-files
25
- mkdocs-glightbox mkdocs-literate-nav mkdocs-section-index
26
- - run: mkdocs gh-deploy --force
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
@@ -18,7 +18,7 @@ jobs:
18
18
  steps:
19
19
  - uses: actions/checkout@v4
20
20
  - name: Set up Python
21
- uses: actions/setup-python@v4
21
+ uses: actions/setup-python@v5
22
22
  with:
23
23
  python-version: '3.x'
24
24
  - name: Install dependencies
@@ -19,7 +19,7 @@ jobs:
19
19
  steps:
20
20
  - uses: actions/checkout@v4
21
21
  - name: Set up Python ${{ matrix.python-version }}
22
- uses: actions/setup-python@v4
22
+ uses: actions/setup-python@v5
23
23
  with:
24
24
  python-version: ${{ matrix.python-version }}
25
25
  - name: Install dependencies
@@ -19,7 +19,7 @@ jobs:
19
19
  steps:
20
20
  - uses: actions/checkout@v4
21
21
  - name: Set up Python ${{ matrix.python-version }}
22
- uses: actions/setup-python@v4
22
+ uses: actions/setup-python@v5
23
23
  with:
24
24
  python-version: ${{ matrix.python-version }}
25
25
  - name: Install dependencies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Graphinate
3
- Version: 0.2.15
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.219.2
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.4; extra == 'test'
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>=7.4.4; extra == 'test'
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="Static Badge" src="https://img.shields.io/badge/PyCharm-21D789.svg?logo=PyCharm&logoColor=black&labelColor=21D789&color=FCF84A">
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="Static Badge" src="https://img.shields.io/badge/PyCharm-21D789.svg?logo=PyCharm&logoColor=black&labelColor=21D789&color=FCF84A">
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="Static Badge" src="https://img.shields.io/badge/PyCharm-21D789.svg?logo=PyCharm&logoColor=black&labelColor=21D789&color=FCF84A">
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.15"
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.219.2"
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>=7.4.4",
64
- "pytest-asyncio>=0.23.4",
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, NewType, Optional, Union
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
- # return (*(kwargs.values()),) if kwargs else UNIVERSE_NODE
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 in order to "inject" into dynamically generated class methods
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>Strawberry GraphiQL</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.render(
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></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>
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <title>GraphQL Voyager</title>
4
+ <title>Graphinate - GraphQL Voyager</title>
5
5
  <style>
6
6
  body {
7
7
  height: 100%;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes