Graphinate 0.8.5__tar.gz → 0.9.0__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 (131) hide show
  1. graphinate-0.9.0/.coveragerc +9 -0
  2. graphinate-0.9.0/.deepsource.toml +28 -0
  3. graphinate-0.9.0/.github/workflows/ci.yml +54 -0
  4. {graphinate-0.8.5 → graphinate-0.9.0}/.github/workflows/codeql.yml +1 -1
  5. {graphinate-0.8.5 → graphinate-0.9.0}/.github/workflows/publish-docs.yaml +9 -6
  6. {graphinate-0.8.5 → graphinate-0.9.0}/.github/workflows/publish.yml +2 -2
  7. {graphinate-0.8.5 → graphinate-0.9.0}/.github/workflows/test-beta.yml +4 -4
  8. {graphinate-0.8.5 → graphinate-0.9.0}/.github/workflows/test.yml +5 -5
  9. {graphinate-0.8.5 → graphinate-0.9.0}/PKG-INFO +28 -16
  10. {graphinate-0.8.5 → graphinate-0.9.0}/README.md +23 -13
  11. {graphinate-0.8.5 → graphinate-0.9.0}/docs/.dates_cache.json +4 -4
  12. graphinate-0.8.5/docs/acknowledge.md → graphinate-0.9.0/docs/acknowledgements.md +7 -7
  13. {graphinate-0.8.5 → graphinate-0.9.0}/examples/code/python_ast.py +3 -1
  14. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/_client.py +6 -6
  15. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/followers.py +2 -3
  16. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/repositories.py +18 -19
  17. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/materializers.py +3 -4
  18. {graphinate-0.8.5 → graphinate-0.9.0}/mkdocs.yml +27 -5
  19. {graphinate-0.8.5 → graphinate-0.9.0}/pyproject.toml +27 -8
  20. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/builders.py +70 -24
  21. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/color.py +1 -1
  22. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/modeling.py +33 -31
  23. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/renderers/graphql.py +10 -4
  24. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/starlette/__init__.py +3 -5
  25. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/rapidoc/index.html +3 -2
  26. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/viewer/index.html +73 -24
  27. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/voyager/index.html +7 -5
  28. graphinate-0.9.0/src/graphinate/typing.py +75 -0
  29. graphinate-0.9.0/tests/graphinate/renderers/test_graphql.py +225 -0
  30. graphinate-0.9.0/tests/graphinate/renderers/test_matplotlib_draw.py +251 -0
  31. graphinate-0.9.0/tests/graphinate/renderers/test_matplotlib_plot.py +265 -0
  32. graphinate-0.9.0/tests/graphinate/server/test_starlette.py +77 -0
  33. {graphinate-0.8.5 → graphinate-0.9.0}/tests/graphinate/test_builders.py +210 -0
  34. graphinate-0.9.0/tests/graphinate/test_modeling.py +197 -0
  35. graphinate-0.8.5/.coveragerc +0 -3
  36. graphinate-0.8.5/src/graphinate/typing.py +0 -65
  37. graphinate-0.8.5/tests/graphinate/test_modeling.py +0 -39
  38. {graphinate-0.8.5 → graphinate-0.9.0}/.github/dependabot.yml +0 -0
  39. {graphinate-0.8.5 → graphinate-0.9.0}/.gitignore +0 -0
  40. {graphinate-0.8.5 → graphinate-0.9.0}/.sonarcloud.properties +0 -0
  41. {graphinate-0.8.5 → graphinate-0.9.0}/LICENSE +0 -0
  42. {graphinate-0.8.5 → graphinate-0.9.0}/docs/assets/badge/v0.json +0 -0
  43. {graphinate-0.8.5 → graphinate-0.9.0}/docs/assets/images/logo-128.png +0 -0
  44. {graphinate-0.8.5 → graphinate-0.9.0}/docs/assets/images/network_graph.png +0 -0
  45. {graphinate-0.8.5 → graphinate-0.9.0}/docs/assets/stylesheets/extra.css +0 -0
  46. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/code.md +0 -0
  47. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/github.md +0 -0
  48. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/math.md +0 -0
  49. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/social.md +0 -0
  50. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/system.md +0 -0
  51. {graphinate-0.8.5 → graphinate-0.9.0}/docs/examples/web.md +0 -0
  52. {graphinate-0.8.5 → graphinate-0.9.0}/docs/gen_ref_pages.py +0 -0
  53. {graphinate-0.8.5 → graphinate-0.9.0}/docs/index.md +0 -0
  54. /graphinate-0.8.5/docs/intro.md → /graphinate-0.9.0/docs/introduction.md +0 -0
  55. {graphinate-0.8.5 → graphinate-0.9.0}/docs/start.md +0 -0
  56. {graphinate-0.8.5 → graphinate-0.9.0}/docs/tutorial.md +0 -0
  57. {graphinate-0.8.5 → graphinate-0.9.0}/docs/usage/cli.md +0 -0
  58. {graphinate-0.8.5 → graphinate-0.9.0}/docs/usage/lib.md +0 -0
  59. {graphinate-0.8.5 → graphinate-0.9.0}/examples/code/git_commits.py +0 -0
  60. {graphinate-0.8.5 → graphinate-0.9.0}/examples/code/python_dependencies.py +0 -0
  61. {graphinate-0.8.5 → graphinate-0.9.0}/examples/code/requirements.txt +0 -0
  62. {graphinate-0.8.5 → graphinate-0.9.0}/examples/code/tokens.py +0 -0
  63. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/commits_visibilty_graph.py +0 -0
  64. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/followers.graphql +0 -0
  65. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/graphql.config.yml +0 -0
  66. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/repositories.graphql +0 -0
  67. {graphinate-0.8.5 → graphinate-0.9.0}/examples/github/requirements.txt +0 -0
  68. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/__init__.py +0 -0
  69. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/_test_materializers.py +0 -0
  70. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/graph_atlas.py +0 -0
  71. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/graphs.py +0 -0
  72. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/gui.py +0 -0
  73. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/polygonal_graph.py +0 -0
  74. {graphinate-0.8.5 → graphinate-0.9.0}/examples/math/requirements.txt +0 -0
  75. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/13/dd/73ce25face7beb30b69b64feeb77.val +0 -0
  76. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/21/9e/00846f323987ba16cfbe0127d8eb.val +0 -0
  77. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/70/b6/2aefb0269adce7fedf877fa0d267.val +0 -0
  78. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/87/f5/ec1739bc369e84c3fcb302bf532a.val +0 -0
  79. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/ba/fe/3aca7b2c38abff60e7ce5eb486a8.val +0 -0
  80. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/c7/9e/ce82b0288020b7152779df09bd73.val +0 -0
  81. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/cache.db +0 -0
  82. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/d2/53/3b88f2fc162561cfdbbe9abc352a.val +0 -0
  83. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/cache/e2/d5/5d079f200eabf9b625b0473f6fbe.val +0 -0
  84. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/gui.py +0 -0
  85. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/music_artists.py +0 -0
  86. {graphinate-0.8.5 → graphinate-0.9.0}/examples/social/requirements.txt +0 -0
  87. {graphinate-0.8.5 → graphinate-0.9.0}/examples/system/.ignore +0 -0
  88. {graphinate-0.8.5 → graphinate-0.9.0}/examples/system/files.py +0 -0
  89. {graphinate-0.8.5 → graphinate-0.9.0}/examples/system/processes.py +0 -0
  90. {graphinate-0.8.5 → graphinate-0.9.0}/examples/system/requirements.txt +0 -0
  91. {graphinate-0.8.5 → graphinate-0.9.0}/examples/web/html_dom.py +0 -0
  92. {graphinate-0.8.5 → graphinate-0.9.0}/examples/web/page_links.py +0 -0
  93. {graphinate-0.8.5 → graphinate-0.9.0}/examples/web/requirements.txt +0 -0
  94. {graphinate-0.8.5 → graphinate-0.9.0}/playground/ethernet/traceroute.py +0 -0
  95. {graphinate-0.8.5 → graphinate-0.9.0}/playground/genric_graph.graphql +0 -0
  96. {graphinate-0.8.5 → graphinate-0.9.0}/playground/graphql.config.yml +0 -0
  97. {graphinate-0.8.5 → graphinate-0.9.0}/playground/house_of_graphs.py +0 -0
  98. {graphinate-0.8.5 → graphinate-0.9.0}/playground/science/caffeine.py +0 -0
  99. {graphinate-0.8.5 → graphinate-0.9.0}/playground/social/albums.json +0 -0
  100. {graphinate-0.8.5 → graphinate-0.9.0}/playground/social/musicisians.py +0 -0
  101. {graphinate-0.8.5 → graphinate-0.9.0}/playground/text/nlp_graph.py +0 -0
  102. {graphinate-0.8.5 → graphinate-0.9.0}/playground/text/requirements.txt +0 -0
  103. {graphinate-0.8.5 → graphinate-0.9.0}/playground/time_series/requirements.txt +0 -0
  104. {graphinate-0.8.5 → graphinate-0.9.0}/playground/time_series/visibility_graph.py +0 -0
  105. {graphinate-0.8.5 → graphinate-0.9.0}/sonar-project.properties +0 -0
  106. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/__init__.py +0 -0
  107. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/__main__.py +0 -0
  108. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/cli.py +0 -0
  109. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/constants.py +0 -0
  110. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/converters.py +0 -0
  111. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/renderers/__init__.py +0 -0
  112. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/renderers/matplotlib.py +0 -0
  113. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/__init__.py +0 -0
  114. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/starlette/views.py +0 -0
  115. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/__init__.py +0 -0
  116. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/elements/__init__.py +0 -0
  117. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/elements/index.html +0 -0
  118. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/graphiql/__init__.py +0 -0
  119. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/graphiql/index.html +0 -0
  120. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/rapidoc/__init__.py +0 -0
  121. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/static/images/logo-128.png +0 -0
  122. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/static/images/logo.svg +0 -0
  123. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/static/images/network_graph.png +0 -0
  124. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/viewer/__init__.py +0 -0
  125. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/server/web/voyager/__init__.py +0 -0
  126. {graphinate-0.8.5 → graphinate-0.9.0}/src/graphinate/tools.py +0 -0
  127. {graphinate-0.8.5 → graphinate-0.9.0}/tests/conftest.py +0 -0
  128. {graphinate-0.8.5 → graphinate-0.9.0}/tests/graphinate/test_cli.py +0 -0
  129. {graphinate-0.8.5 → graphinate-0.9.0}/tests/graphinate/test_color.py +0 -0
  130. {graphinate-0.8.5 → graphinate-0.9.0}/tests/graphinate/test_converters.py +0 -0
  131. {graphinate-0.8.5 → graphinate-0.9.0}/tests/graphinate/test_server.py +0 -0
@@ -0,0 +1,9 @@
1
+ [run]
2
+ branch = True
3
+ relative_files = True
4
+ omit =
5
+ .venv/*
6
+ docs/*
7
+ examples/*
8
+ playground/*
9
+ tests/*
@@ -0,0 +1,28 @@
1
+ version = 1
2
+
3
+ test_patterns = [
4
+ "tests/**",
5
+ "test_*.py"
6
+ ]
7
+
8
+ exclude_patterns = [
9
+ "docs/**",
10
+ "examples/**",
11
+ "playground/**"
12
+ ]
13
+
14
+ [[analyzers]]
15
+ name = "javascript"
16
+
17
+ [analyzers.meta]
18
+ environment = ["browser"]
19
+
20
+ [[analyzers]]
21
+ name = "test-coverage"
22
+
23
+ [[analyzers]]
24
+ name = "python"
25
+
26
+ [analyzers.meta]
27
+ runtime_version = "3.x.x"
28
+
@@ -0,0 +1,54 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3
+
4
+ name: CI
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+ pull_request:
11
+ branches:
12
+ - main
13
+
14
+ jobs:
15
+ build:
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14"]
21
+ steps:
22
+ - uses: actions/checkout@v5
23
+ - name: Set up UV and Python ${{ matrix.python-version }}
24
+ uses: astral-sh/setup-uv@v7
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+ - name: Install dependencies
28
+ run: uv sync
29
+ - name: Run Ruff Linter
30
+ run: uvx ruff check .
31
+ - name: Check Ruff Formatting
32
+ run: uvx ruff format --check .
33
+ - name: Test with pytest
34
+ run: |
35
+ uv sync --group test
36
+ uvx pytest tests --cov=src --cov-branch --cov-report=xml --junitxml=junit.xml -o junit_family=legacy -n auto
37
+ - name: Upload coverage reports to Codecov
38
+ uses: codecov/codecov-action@v5
39
+ with:
40
+ token: ${{ secrets.CODECOV_TOKEN }}
41
+ - name: Upload test results to Codecov
42
+ if: ${{ !cancelled() }}
43
+ uses: codecov/test-results-action@v1
44
+ with:
45
+ token: ${{ secrets.CODECOV_TOKEN }}
46
+ - name: Run codacy-coverage-reporter
47
+ uses: codacy/codacy-coverage-reporter-action@v1.3.0
48
+ with:
49
+ #project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
50
+ # or
51
+ api-token: ${{ secrets.CODACY_API_TOKEN }}
52
+ coverage-reports: coverage.xml
53
+ # or a comma-separated list for multiple reports
54
+ # coverage-reports: <PATH_TO_REPORT>, <PATH_TO_REPORT>
@@ -46,7 +46,7 @@ jobs:
46
46
 
47
47
  steps:
48
48
  - name: Checkout repository
49
- uses: actions/checkout@v4
49
+ uses: actions/checkout@v5
50
50
 
51
51
  # Initializes the CodeQL tools for scanning.
52
52
  - name: Initialize CodeQL
@@ -9,21 +9,24 @@ jobs:
9
9
  deploy:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
- - uses: actions/checkout@v4
13
- - uses: actions/setup-python@v5
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v5
14
+ - name: Set up Python
15
+ uses: actions/setup-python@v6
14
16
  with:
15
17
  python-version: 3.x
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v7
16
20
  - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
17
- - uses: actions/cache@v4
21
+ - name: Cache mkdocs-material dependencies
22
+ uses: actions/cache@v4
18
23
  with:
19
24
  key: mkdocs-material-${{ env.cache_id }}
20
25
  path: .cache
21
26
  restore-keys: |
22
27
  mkdocs-material-
23
28
  - run: |
24
- python -m pip install pip --upgrade
25
- pip install uv
26
29
  uv venv
27
30
  source .venv/bin/activate
28
- uv pip install mkdocs-material mkdocstrings-python mkdocs-git-committers-plugin-2 "mkdocs-git-revision-date-localized-plugin<1.4.0" mkdocs-gen-files mkdocs-glightbox mkdocs-literate-nav mkdocs-section-index
31
+ uv sync --only-group docs
29
32
  mkdocs gh-deploy --force
@@ -16,9 +16,9 @@ jobs:
16
16
  deploy:
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v5
20
20
  - name: Set up Python
21
- uses: actions/setup-python@v5
21
+ uses: actions/setup-python@v6
22
22
  with:
23
23
  python-version: '3.x'
24
24
  - name: Install dependencies
@@ -16,11 +16,11 @@ jobs:
16
16
  fail-fast: false
17
17
  matrix:
18
18
  # https://github.com/actions/python-versions/blob/main/versions-manifest.json
19
- python-version: [ "3.14.0-alpha.6" ]
19
+ python-version: [ "3.15.0-alpha.1" ]
20
20
  steps:
21
- - uses: actions/checkout@v4
21
+ - uses: actions/checkout@v5
22
22
  - name: Set up Python ${{ matrix.python-version }}
23
- uses: actions/setup-python@v5
23
+ uses: actions/setup-python@v6
24
24
  with:
25
25
  python-version: ${{ matrix.python-version }}
26
26
  - name: Install dependencies
@@ -38,5 +38,5 @@ jobs:
38
38
  flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
39
39
  - name: Test with pytest
40
40
  run: |
41
- python -m pip install faker pytest pytest-asyncio pytest-cov pytest-randomly pytest-xdist starlette-prometheus uvicorn[standard]
41
+ python -m pip install faker httpx pytest pytest-asyncio pytest-cov pytest-mock pytest-randomly pytest-xdist starlette-prometheus uvicorn[standard]
42
42
  pytest tests --cov=src --cov-branch --cov-report=xml --junitxml=test_results.xml -n auto
@@ -15,18 +15,18 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- python-version: [ "3.10", "3.11", "3.12", "3.13"]
18
+ python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ]
19
19
  steps:
20
- - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v5
21
21
  - name: Set up Python ${{ matrix.python-version }}
22
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
23
23
  with:
24
24
  python-version: ${{ matrix.python-version }}
25
25
  - name: Install dependencies
26
26
  run: |
27
27
  python -m pip install --upgrade pip
28
28
  python -m pip install --upgrade setuptools wheel
29
- python -m pip install .
29
+ python -m pip install .[test]
30
30
  if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
31
31
  - name: Lint with flake8
32
32
  run: |
@@ -37,7 +37,7 @@ jobs:
37
37
  flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
38
38
  - name: Test with pytest
39
39
  run: |
40
- python -m pip install faker pytest pytest-asyncio pytest-cov pytest-randomly pytest-xdist starlette-prometheus uvicorn[standard]
40
+ python -m pip install faker httpx pytest pytest-asyncio pytest-cov pytest-mock pytest-randomly pytest-xdist starlette-prometheus uvicorn[standard]
41
41
  pytest tests --cov=src --cov-branch --cov-report=xml --junitxml=junit.xml -o junit_family=legacy -n auto
42
42
  - name: Upload coverage reports to Codecov
43
43
  uses: codecov/codecov-action@v5
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Graphinate
3
- Version: 0.8.5
3
+ Version: 0.9.0
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
@@ -22,18 +22,20 @@ Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: 3.14
25
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
26
27
  Classifier: Topic :: Scientific/Engineering
27
28
  Classifier: Topic :: Software Development :: Libraries
28
29
  Classifier: Typing :: Typed
29
- Requires-Python: >=3.10
30
+ Requires-Python: <3.15,>=3.10
30
31
  Requires-Dist: click
31
32
  Requires-Dist: inflect
32
33
  Requires-Dist: loguru
33
34
  Requires-Dist: mappingtools
34
35
  Requires-Dist: matplotlib
35
36
  Requires-Dist: networkx
36
- Requires-Dist: networkx-mermaid
37
+ Requires-Dist: networkx-mermaid>=0.3.0
38
+ Requires-Dist: networkx-query>=2.1.3
37
39
  Requires-Dist: strawberry-graphql[asgi,opentelemetry]
38
40
  Provides-Extra: plot
39
41
  Requires-Dist: scipy; extra == 'plot'
@@ -72,8 +74,8 @@ Description-Content-Type: text/markdown
72
74
  <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>
73
75
  <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>
74
76
  <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>
75
- <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>
76
77
  <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>
78
+ <a href="https://github.com/hukkin/mdformat"><img alt="mdformat" src="https://img.shields.io/badge/mdformat-526CFE?&logo=markdown&logoColor=white&labelColor=grey"></a>
77
79
  <a href="https://hatch.pypa.io"><img alt="Hatch project" class="off-glb" loading="lazy" src="https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg"></a>
78
80
  </td>
79
81
  </tr>
@@ -99,8 +101,9 @@ Description-Content-Type: text/markdown
99
101
  <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>
100
102
  <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>
101
103
  <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>
102
- <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>
103
104
  <a href="https://www.codefactor.io/repository/github/erivlis/graphinate"><img src="https://www.codefactor.io/repository/github/erivlis/graphinate/badge" alt="CodeFactor" /></a>
105
+ <a href="https://app.deepsource.com/gh/erivlis/graphinate/" target="_blank"><img alt="DeepSource" title="DeepSource" src="https://app.deepsource.com/gh/erivlis/graphinate.svg/?label=active+issues&show_trend=true&token=5n11jDEmcZB-6eyGR34rQaxF"/></a>
106
+ <a href="https://app.deepsource.com/gh/erivlis/graphinate/" target="_blank"><img alt="DeepSource" title="DeepSource" src="https://app.deepsource.com/gh/erivlis/graphinate.svg/?label=resolved+issues&show_trend=true&token=5n11jDEmcZB-6eyGR34rQaxF"/></a>
104
107
  <a href="https://snyk.io/test/github/erivlis/graphinate"><img alt="Snyk" src="https://snyk.io/test/github/erivlis/Graphinate/badge.svg"></a>
105
108
  </td>
106
109
  </tr>
@@ -137,10 +140,13 @@ Description-Content-Type: text/markdown
137
140
  - [Python AST - 3D Force-Directed Animation](#python-ast---3d-force-directed-animation)
138
141
  - [Web Page Links](#web-page-links)
139
142
  - [Development](#development)
143
+ - [Install dependencies](#install-dependencies)
144
+ - [Update dependencies](#update-dependencies)
140
145
  - [Ruff](#ruff)
141
146
  - [Test](#test)
142
147
  - [Standard (cobertura) XML Coverage Report](#standard-cobertura-xml-coverage-report)
143
148
  - [HTML Coverage Report](#html-coverage-report)
149
+ - [Terminal Coverage Report](#terminal-coverage-report)
144
150
  - [Docs](#docs)
145
151
  - [test](#test-1)
146
152
  - [build](#build)
@@ -199,6 +205,7 @@ N: int = 8
199
205
  # It will be used to hold the graph definitions
200
206
  graph_model: graphinate.GraphModel = graphinate.model(name="Octagonal Graph")
201
207
 
208
+
202
209
  # Register in the Graph Model the edges' supplier generator function
203
210
  @graph_model.edge()
204
211
  def edge():
@@ -236,6 +243,7 @@ schema = builder.build()
236
243
  # and serve it using Uvicorn web server
237
244
  graphinate.graphql.server(schema)
238
245
  ```
246
+
239
247
  ## CLI
240
248
 
241
249
  ### Commands
@@ -298,7 +306,6 @@ Options:
298
306
 
299
307
  ![repo_graph](https://github.com/erivlis/graphinate/assets/9897520/9c044bbe-1f21-41b8-b879-95b8362ad48d)
300
308
 
301
-
302
309
  ### Web Links
303
310
 
304
311
  ![Web Page Links](https://github.com/erivlis/graphinate/assets/9897520/ea5b00a2-75d1-4d0e-86af-272f20973149)
@@ -320,6 +327,7 @@ uv lock --upgrade
320
327
  uv sync --all-extras --all-groups
321
328
  ```
322
329
 
330
+
323
331
  ### Ruff
324
332
 
325
333
  #### Report issues
@@ -374,35 +382,39 @@ python -m mkdocs build
374
382
 
375
383
  #### Python
376
384
 
377
- <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>
385
+ <a href="https://palletsprojects.com/projects/click/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://palletsprojects.com/static/content/projects/click-name.svg" alt="Click Logo"></a>
378
386
  <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>
379
- <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>
380
- <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>
387
+ <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>
388
+ <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>
389
+ <a href="https://www.starlette.io/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://www.starlette.io/img/starlette.svg#only-light" alt="Starlette Logo"></a>
381
390
  <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>
382
391
 
383
392
  #### Javascript and HTML
384
393
 
385
- <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>
394
+ <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"></a>
386
395
  <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>
387
- <a href="https://github.com/cocopon/tweakpane"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://user-images.githubusercontent.com/602961/184479032-38f50be3-e235-4914-85c0-dce316b33ed2.png" alt="Tweakpane Logo"></a>
396
+ <a href="https://github.com/cocopon/tweakpane"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://user-images.githubusercontent.com/602961/184479032-38f50be3-e235-4914-85c0-dce316b33ed2.png" alt="Tweakpane"></a>
388
397
 
389
398
  ### Dev Tools
390
399
 
391
- <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>
400
+ <a href="https://astral.sh/uv"><img height="60" style="padding: 16px; background: #261230;" src="https://docs.astral.sh/uv/assets/logo-letter.svg" alt="uv logo"></a>
401
+ <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>
402
+ <a href="https://mdformat.readthedocs.io"><img height="60" width="60" style="aspect-ratio: auto; padding: 4px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://mdformat.readthedocs.io/en/stable/_static/logo-150px.png" alt="mdformat"></a>
392
403
  <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>
393
404
  <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>
394
- <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>
395
- <a href="https://astral.sh/uv"><img height="60" style="padding: 16px; background: #261230;" src="https://docs.astral.sh/uv/assets/logo-letter.svg" alt="uv logo"></a>
405
+ <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>
406
+
407
+
396
408
 
397
409
  ### IDE
398
410
 
399
411
  <a href="https://www.jetbrains.com/pycharm/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo"></a>
400
412
 
401
- --------------------------------
413
+ ______________________________________________________________________
402
414
 
403
415
  ![Alt](https://repobeats.axiom.co/api/embed/683f50f1d2de0e13e468c34a692612c2de4d56bd.svg "Repobeats analytics image")
404
416
 
405
- --------------------------------
417
+ ______________________________________________________________________
406
418
 
407
419
  <img alt="Work on my Machine" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
408
420
 
@@ -28,8 +28,8 @@
28
28
  <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>
29
29
  <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>
30
30
  <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>
31
- <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>
32
31
  <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>
32
+ <a href="https://github.com/hukkin/mdformat"><img alt="mdformat" src="https://img.shields.io/badge/mdformat-526CFE?&logo=markdown&logoColor=white&labelColor=grey"></a>
33
33
  <a href="https://hatch.pypa.io"><img alt="Hatch project" class="off-glb" loading="lazy" src="https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg"></a>
34
34
  </td>
35
35
  </tr>
@@ -55,8 +55,9 @@
55
55
  <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>
56
56
  <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>
57
57
  <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>
58
- <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>
59
58
  <a href="https://www.codefactor.io/repository/github/erivlis/graphinate"><img src="https://www.codefactor.io/repository/github/erivlis/graphinate/badge" alt="CodeFactor" /></a>
59
+ <a href="https://app.deepsource.com/gh/erivlis/graphinate/" target="_blank"><img alt="DeepSource" title="DeepSource" src="https://app.deepsource.com/gh/erivlis/graphinate.svg/?label=active+issues&show_trend=true&token=5n11jDEmcZB-6eyGR34rQaxF"/></a>
60
+ <a href="https://app.deepsource.com/gh/erivlis/graphinate/" target="_blank"><img alt="DeepSource" title="DeepSource" src="https://app.deepsource.com/gh/erivlis/graphinate.svg/?label=resolved+issues&show_trend=true&token=5n11jDEmcZB-6eyGR34rQaxF"/></a>
60
61
  <a href="https://snyk.io/test/github/erivlis/graphinate"><img alt="Snyk" src="https://snyk.io/test/github/erivlis/Graphinate/badge.svg"></a>
61
62
  </td>
62
63
  </tr>
@@ -93,10 +94,13 @@
93
94
  - [Python AST - 3D Force-Directed Animation](#python-ast---3d-force-directed-animation)
94
95
  - [Web Page Links](#web-page-links)
95
96
  - [Development](#development)
97
+ - [Install dependencies](#install-dependencies)
98
+ - [Update dependencies](#update-dependencies)
96
99
  - [Ruff](#ruff)
97
100
  - [Test](#test)
98
101
  - [Standard (cobertura) XML Coverage Report](#standard-cobertura-xml-coverage-report)
99
102
  - [HTML Coverage Report](#html-coverage-report)
103
+ - [Terminal Coverage Report](#terminal-coverage-report)
100
104
  - [Docs](#docs)
101
105
  - [test](#test-1)
102
106
  - [build](#build)
@@ -155,6 +159,7 @@ N: int = 8
155
159
  # It will be used to hold the graph definitions
156
160
  graph_model: graphinate.GraphModel = graphinate.model(name="Octagonal Graph")
157
161
 
162
+
158
163
  # Register in the Graph Model the edges' supplier generator function
159
164
  @graph_model.edge()
160
165
  def edge():
@@ -192,6 +197,7 @@ schema = builder.build()
192
197
  # and serve it using Uvicorn web server
193
198
  graphinate.graphql.server(schema)
194
199
  ```
200
+
195
201
  ## CLI
196
202
 
197
203
  ### Commands
@@ -254,7 +260,6 @@ Options:
254
260
 
255
261
  ![repo_graph](https://github.com/erivlis/graphinate/assets/9897520/9c044bbe-1f21-41b8-b879-95b8362ad48d)
256
262
 
257
-
258
263
  ### Web Links
259
264
 
260
265
  ![Web Page Links](https://github.com/erivlis/graphinate/assets/9897520/ea5b00a2-75d1-4d0e-86af-272f20973149)
@@ -276,6 +281,7 @@ uv lock --upgrade
276
281
  uv sync --all-extras --all-groups
277
282
  ```
278
283
 
284
+
279
285
  ### Ruff
280
286
 
281
287
  #### Report issues
@@ -330,35 +336,39 @@ python -m mkdocs build
330
336
 
331
337
  #### Python
332
338
 
333
- <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>
339
+ <a href="https://palletsprojects.com/projects/click/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://palletsprojects.com/static/content/projects/click-name.svg" alt="Click Logo"></a>
334
340
  <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>
335
- <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>
336
- <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>
341
+ <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>
342
+ <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>
343
+ <a href="https://www.starlette.io/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://www.starlette.io/img/starlette.svg#only-light" alt="Starlette Logo"></a>
337
344
  <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>
338
345
 
339
346
  #### Javascript and HTML
340
347
 
341
- <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>
348
+ <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"></a>
342
349
  <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>
343
- <a href="https://github.com/cocopon/tweakpane"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://user-images.githubusercontent.com/602961/184479032-38f50be3-e235-4914-85c0-dce316b33ed2.png" alt="Tweakpane Logo"></a>
350
+ <a href="https://github.com/cocopon/tweakpane"><img height="60" style="background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://user-images.githubusercontent.com/602961/184479032-38f50be3-e235-4914-85c0-dce316b33ed2.png" alt="Tweakpane"></a>
344
351
 
345
352
  ### Dev Tools
346
353
 
347
- <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>
354
+ <a href="https://astral.sh/uv"><img height="60" style="padding: 16px; background: #261230;" src="https://docs.astral.sh/uv/assets/logo-letter.svg" alt="uv logo"></a>
355
+ <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>
356
+ <a href="https://mdformat.readthedocs.io"><img height="60" width="60" style="aspect-ratio: auto; padding: 4px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://mdformat.readthedocs.io/en/stable/_static/logo-150px.png" alt="mdformat"></a>
348
357
  <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>
349
358
  <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>
350
- <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>
351
- <a href="https://astral.sh/uv"><img height="60" style="padding: 16px; background: #261230;" src="https://docs.astral.sh/uv/assets/logo-letter.svg" alt="uv logo"></a>
359
+ <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>
360
+
361
+
352
362
 
353
363
  ### IDE
354
364
 
355
365
  <a href="https://www.jetbrains.com/pycharm/"><img height="60" style="padding: 5px; background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo"></a>
356
366
 
357
- --------------------------------
367
+ ______________________________________________________________________
358
368
 
359
369
  ![Alt](https://repobeats.axiom.co/api/embed/683f50f1d2de0e13e468c34a692612c2de4d56bd.svg "Repobeats analytics image")
360
370
 
361
- --------------------------------
371
+ ______________________________________________________________________
362
372
 
363
373
  <img alt="Work on my Machine" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
364
374
 
@@ -1,15 +1,15 @@
1
1
  {
2
- "acknowledge.md": {
2
+ "acknowledgements.md": {
3
3
  "created": "2023-08-20T00:21:55.621436",
4
- "modified": "2025-03-12T00:39:57.859235"
4
+ "modified": "2025-08-22T22:30:50.704535"
5
5
  },
6
6
  "index.md": {
7
7
  "created": "2023-08-15T00:05:21.586874",
8
8
  "modified": "2025-03-12T00:40:46.459147"
9
9
  },
10
- "intro.md": {
10
+ "introduction.md": {
11
11
  "created": "2023-08-19T23:54:18.668094",
12
- "modified": "2025-03-11T23:24:02.836144"
12
+ "modified": "2025-08-22T22:30:50.705536"
13
13
  },
14
14
  "start.md": {
15
15
  "created": "2023-08-20T00:07:42.683716",
@@ -4,11 +4,12 @@
4
4
 
5
5
  ### Python
6
6
 
7
- <a href="https://palletsprojects.com/p/click/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://click.palletsprojects.com/en/7.x/_images/click-logo.png" alt="Click Logo."></a>
8
- <a href="https://github.com/Delgan/loguru"><img style="height: 50px; 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>
9
- <a href="https://matplotlib.org/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://matplotlib.org/_static/logo_dark.svg" alt="matplotlib Logo."></a>
10
- <a href="https://networkx.org/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://networkx.org/_static/networkx_logo.svg" alt="NetworkX Logo."></a>
11
- <a href="https://strawberry.rocks/"><img style="height: 50px; 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>
7
+ <a href="https://palletsprojects.com/projects/click/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://palletsprojects.com/static/content/projects/click-name.svg" alt="Click Logo"></a>
8
+ <a href="https://github.com/Delgan/loguru"><img style="height: 50px; 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>
9
+ <a href="https://matplotlib.org/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://matplotlib.org/_static/logo_dark.svg" alt="matplotlib Logo"></a>
10
+ <a href="https://networkx.org/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://networkx.org/_static/networkx_logo.svg" alt="NetworkX Logo"></a>
11
+ <a href="https://www.starlette.io/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://www.starlette.io/img/starlette.svg" alt="Starlette Logo"></a>
12
+ <a href="https://strawberry.rocks/"><img style="height: 50px; 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>
12
13
 
13
14
  ### Javascript and HTML
14
15
 
@@ -20,12 +21,11 @@
20
21
 
21
22
  <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>
22
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://mdformat.readthedocs.io"><img style="height: 50px; width: 50px; aspect-ratio: auto; padding: 4px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://mdformat.readthedocs.io/en/stable/_static/logo-150px.png" alt="mdformat"></a>
23
25
  <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>
24
26
  <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>
25
27
  <a href="https://hatch.pypa.io/"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://hatch.pypa.io/latest/assets/images/logo.svg" alt="Hatch logo."></a>
26
28
 
27
-
28
-
29
29
  ## IDE
30
30
 
31
31
  <a href="https://www.jetbrains.com/pycharm/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo."></a>
@@ -51,7 +51,9 @@ def ast_graph_model():
51
51
  GraphModel: A graph model representing the AST nodes and their relationships.
52
52
  """
53
53
 
54
- graph_model = graphinate.model(name='AST Graph')
54
+ code_object = graphinate.builders.D3Builder
55
+
56
+ graph_model = graphinate.model(name=f'AST Graph - {code_object.__qualname__}',)
55
57
 
56
58
  root_ast_node = ast.parse(inspect.getsource(graphinate.builders.D3Builder))
57
59
 
@@ -1,7 +1,7 @@
1
1
  import functools
2
2
  import os
3
3
  from collections.abc import Iterable
4
- from typing import Optional, Union
4
+ from typing import Union
5
5
 
6
6
  # see requirements.txt
7
7
  from github import Auth, Github
@@ -26,7 +26,7 @@ client = Github(auth=auth)
26
26
 
27
27
 
28
28
  @functools.lru_cache
29
- def github_user(user_id: Optional[str] = None) -> Union[NamedUser, AuthenticatedUser]:
29
+ def github_user(user_id: str | None = None) -> Union[NamedUser, AuthenticatedUser]:
30
30
  """
31
31
  Get the GitHub user object for the specified user ID or the authenticated user.
32
32
 
@@ -46,8 +46,8 @@ def github_user(user_id: Optional[str] = None) -> Union[NamedUser, Authenticated
46
46
 
47
47
  @functools.lru_cache
48
48
  def github_repositories(
49
- user_id: Optional[str] = None,
50
- repo_id: Optional[str] = None) -> Iterable[Repository]:
49
+ user_id: str | None = None,
50
+ repo_id: str | None = None) -> Iterable[Repository]:
51
51
  """
52
52
  Get the GitHub repositories for the specified user ID or the authenticated user.
53
53
 
@@ -74,7 +74,7 @@ def github_repositories(
74
74
 
75
75
  def github_commits(
76
76
  repo: Repository,
77
- commit_id: Optional[str] = None) -> Iterable[Commit]:
77
+ commit_id: str | None = None) -> Iterable[Commit]:
78
78
  """
79
79
  Retrieve commits from a GitHub repository.
80
80
 
@@ -111,7 +111,7 @@ def github_commits(
111
111
 
112
112
  def github_files(
113
113
  commit: Commit,
114
- file_id: Optional[str] = None) -> Iterable[File]:
114
+ file_id: str | None = None) -> Iterable[File]:
115
115
  """
116
116
  Retrieves Files from a GitHub Commit
117
117