Graphinate 0.8.4__tar.gz → 0.8.6__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.8.6/.coveragerc +9 -0
- graphinate-0.8.6/.deepsource.toml +28 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/workflows/codeql.yml +1 -1
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/workflows/publish-docs.yaml +1 -1
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/workflows/publish.yml +1 -1
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/workflows/test-beta.yml +3 -3
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/workflows/test.yml +2 -2
- {graphinate-0.8.4 → graphinate-0.8.6}/PKG-INFO +26 -14
- {graphinate-0.8.4 → graphinate-0.8.6}/README.md +23 -12
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/.dates_cache.json +4 -4
- graphinate-0.8.4/docs/acknowledge.md → graphinate-0.8.6/docs/acknowledgements.md +7 -7
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/code/python_ast.py +3 -1
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/_client.py +10 -10
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/followers.py +2 -3
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/repositories.py +18 -19
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/materializers.py +3 -4
- {graphinate-0.8.4 → graphinate-0.8.6}/mkdocs.yml +27 -5
- {graphinate-0.8.4 → graphinate-0.8.6}/pyproject.toml +20 -5
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/builders.py +90 -29
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/color.py +34 -7
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/modeling.py +23 -23
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/renderers/graphql.py +9 -3
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/renderers/matplotlib.py +1 -1
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/starlette/__init__.py +1 -3
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/rapidoc/index.html +3 -2
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/viewer/index.html +91 -40
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/voyager/index.html +2 -2
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/typing.py +20 -11
- graphinate-0.8.6/tests/graphinate/renderers/test_graphql.py +225 -0
- graphinate-0.8.6/tests/graphinate/renderers/test_matplotlib_draw.py +251 -0
- graphinate-0.8.6/tests/graphinate/renderers/test_matplotlib_plot.py +265 -0
- graphinate-0.8.6/tests/graphinate/server/test_starlette.py +78 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/graphinate/test_builders.py +210 -0
- graphinate-0.8.6/tests/graphinate/test_modeling.py +197 -0
- graphinate-0.8.4/.coveragerc +0 -3
- graphinate-0.8.4/tests/graphinate/test_modeling.py +0 -39
- {graphinate-0.8.4 → graphinate-0.8.6}/.github/dependabot.yml +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/.gitignore +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/.sonarcloud.properties +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/LICENSE +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/assets/badge/v0.json +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/assets/images/logo-128.png +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/assets/images/network_graph.png +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/assets/stylesheets/extra.css +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/code.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/github.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/math.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/social.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/system.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/examples/web.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/gen_ref_pages.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/index.md +0 -0
- /graphinate-0.8.4/docs/intro.md → /graphinate-0.8.6/docs/introduction.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/start.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/tutorial.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/usage/cli.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/docs/usage/lib.md +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/code/git_commits.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/code/python_dependencies.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/code/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/code/tokens.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/commits_visibilty_graph.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/followers.graphql +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/graphql.config.yml +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/repositories.graphql +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/github/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/_test_materializers.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/graph_atlas.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/graphs.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/gui.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/polygonal_graph.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/math/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/13/dd/73ce25face7beb30b69b64feeb77.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/21/9e/00846f323987ba16cfbe0127d8eb.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/70/b6/2aefb0269adce7fedf877fa0d267.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/87/f5/ec1739bc369e84c3fcb302bf532a.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/ba/fe/3aca7b2c38abff60e7ce5eb486a8.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/c7/9e/ce82b0288020b7152779df09bd73.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/cache.db +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/d2/53/3b88f2fc162561cfdbbe9abc352a.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/cache/e2/d5/5d079f200eabf9b625b0473f6fbe.val +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/gui.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/music_artists.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/social/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/system/.ignore +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/system/files.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/system/processes.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/system/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/web/html_dom.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/web/page_links.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/examples/web/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/ethernet/traceroute.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/genric_graph.graphql +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/graphql.config.yml +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/house_of_graphs.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/science/caffeine.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/social/albums.json +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/social/musicisians.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/text/nlp_graph.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/text/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/time_series/requirements.txt +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/playground/time_series/visibility_graph.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/sonar-project.properties +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/__main__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/cli.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/constants.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/converters.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/renderers/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/starlette/views.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/elements/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/elements/index.html +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/graphiql/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/graphiql/index.html +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/rapidoc/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/static/images/logo-128.png +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/static/images/logo.svg +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/static/images/network_graph.png +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/viewer/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/server/web/voyager/__init__.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/src/graphinate/tools.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/conftest.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/graphinate/test_cli.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/graphinate/test_color.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/graphinate/test_converters.py +0 -0
- {graphinate-0.8.4 → graphinate-0.8.6}/tests/graphinate/test_server.py +0 -0
|
@@ -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
|
+
|
|
@@ -16,9 +16,9 @@ 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-
|
|
19
|
+
python-version: [ "3.14.0-rc.2" ]
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v5
|
|
22
22
|
- name: Set up Python ${{ matrix.python-version }}
|
|
23
23
|
uses: actions/setup-python@v5
|
|
24
24
|
with:
|
|
@@ -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 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
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
matrix:
|
|
18
18
|
python-version: [ "3.10", "3.11", "3.12", "3.13"]
|
|
19
19
|
steps:
|
|
20
|
-
- uses: actions/checkout@
|
|
20
|
+
- uses: actions/checkout@v5
|
|
21
21
|
- name: Set up Python ${{ matrix.python-version }}
|
|
22
22
|
uses: actions/setup-python@v5
|
|
23
23
|
with:
|
|
@@ -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 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.
|
|
3
|
+
Version: 0.8.6
|
|
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
|
|
@@ -33,7 +33,8 @@ Requires-Dist: loguru
|
|
|
33
33
|
Requires-Dist: mappingtools
|
|
34
34
|
Requires-Dist: matplotlib
|
|
35
35
|
Requires-Dist: networkx
|
|
36
|
-
Requires-Dist: networkx-mermaid
|
|
36
|
+
Requires-Dist: networkx-mermaid
|
|
37
|
+
Requires-Dist: networkx-query>=2.1.3
|
|
37
38
|
Requires-Dist: strawberry-graphql[asgi,opentelemetry]
|
|
38
39
|
Provides-Extra: plot
|
|
39
40
|
Requires-Dist: scipy; extra == 'plot'
|
|
@@ -74,6 +75,7 @@ Description-Content-Type: text/markdown
|
|
|
74
75
|
<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
76
|
<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
|

|
|
300
308
|
|
|
301
|
-
|
|
302
309
|
### Web Links
|
|
303
310
|
|
|
304
311
|

|
|
@@ -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/
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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://
|
|
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://
|
|
395
|
-
|
|
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
|

|
|
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
|
|
|
@@ -30,6 +30,7 @@
|
|
|
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
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
32
|
<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>
|
|
33
|
+
<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
34
|
<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
35
|
</td>
|
|
35
36
|
</tr>
|
|
@@ -55,8 +56,9 @@
|
|
|
55
56
|
<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
57
|
<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
58
|
<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
59
|
<a href="https://www.codefactor.io/repository/github/erivlis/graphinate"><img src="https://www.codefactor.io/repository/github/erivlis/graphinate/badge" alt="CodeFactor" /></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=active+issues&show_trend=true&token=5n11jDEmcZB-6eyGR34rQaxF"/></a>
|
|
61
|
+
<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
62
|
<a href="https://snyk.io/test/github/erivlis/graphinate"><img alt="Snyk" src="https://snyk.io/test/github/erivlis/Graphinate/badge.svg"></a>
|
|
61
63
|
</td>
|
|
62
64
|
</tr>
|
|
@@ -93,10 +95,13 @@
|
|
|
93
95
|
- [Python AST - 3D Force-Directed Animation](#python-ast---3d-force-directed-animation)
|
|
94
96
|
- [Web Page Links](#web-page-links)
|
|
95
97
|
- [Development](#development)
|
|
98
|
+
- [Install dependencies](#install-dependencies)
|
|
99
|
+
- [Update dependencies](#update-dependencies)
|
|
96
100
|
- [Ruff](#ruff)
|
|
97
101
|
- [Test](#test)
|
|
98
102
|
- [Standard (cobertura) XML Coverage Report](#standard-cobertura-xml-coverage-report)
|
|
99
103
|
- [HTML Coverage Report](#html-coverage-report)
|
|
104
|
+
- [Terminal Coverage Report](#terminal-coverage-report)
|
|
100
105
|
- [Docs](#docs)
|
|
101
106
|
- [test](#test-1)
|
|
102
107
|
- [build](#build)
|
|
@@ -155,6 +160,7 @@ N: int = 8
|
|
|
155
160
|
# It will be used to hold the graph definitions
|
|
156
161
|
graph_model: graphinate.GraphModel = graphinate.model(name="Octagonal Graph")
|
|
157
162
|
|
|
163
|
+
|
|
158
164
|
# Register in the Graph Model the edges' supplier generator function
|
|
159
165
|
@graph_model.edge()
|
|
160
166
|
def edge():
|
|
@@ -192,6 +198,7 @@ schema = builder.build()
|
|
|
192
198
|
# and serve it using Uvicorn web server
|
|
193
199
|
graphinate.graphql.server(schema)
|
|
194
200
|
```
|
|
201
|
+
|
|
195
202
|
## CLI
|
|
196
203
|
|
|
197
204
|
### Commands
|
|
@@ -254,7 +261,6 @@ Options:
|
|
|
254
261
|
|
|
255
262
|

|
|
256
263
|
|
|
257
|
-
|
|
258
264
|
### Web Links
|
|
259
265
|
|
|
260
266
|

|
|
@@ -276,6 +282,7 @@ uv lock --upgrade
|
|
|
276
282
|
uv sync --all-extras --all-groups
|
|
277
283
|
```
|
|
278
284
|
|
|
285
|
+
|
|
279
286
|
### Ruff
|
|
280
287
|
|
|
281
288
|
#### Report issues
|
|
@@ -330,35 +337,39 @@ python -m mkdocs build
|
|
|
330
337
|
|
|
331
338
|
#### Python
|
|
332
339
|
|
|
333
|
-
<a href="https://palletsprojects.com/
|
|
340
|
+
<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
341
|
<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
|
|
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
|
|
342
|
+
<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>
|
|
343
|
+
<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>
|
|
344
|
+
<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
345
|
<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
346
|
|
|
339
347
|
#### Javascript and HTML
|
|
340
348
|
|
|
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
|
|
349
|
+
<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
350
|
<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
|
|
351
|
+
<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
352
|
|
|
345
353
|
### Dev Tools
|
|
346
354
|
|
|
347
|
-
<a href="https://
|
|
355
|
+
<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>
|
|
356
|
+
<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>
|
|
357
|
+
<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
358
|
<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
359
|
<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://
|
|
351
|
-
|
|
360
|
+
<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>
|
|
361
|
+
|
|
362
|
+
|
|
352
363
|
|
|
353
364
|
### IDE
|
|
354
365
|
|
|
355
366
|
<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
367
|
|
|
357
|
-
|
|
368
|
+
______________________________________________________________________
|
|
358
369
|
|
|
359
370
|

|
|
360
371
|
|
|
361
|
-
|
|
372
|
+
______________________________________________________________________
|
|
362
373
|
|
|
363
374
|
<img alt="Work on my Machine" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
|
|
364
375
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"acknowledgements.md": {
|
|
3
3
|
"created": "2023-08-20T00:21:55.621436",
|
|
4
|
-
"modified": "2025-
|
|
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
|
-
"
|
|
10
|
+
"introduction.md": {
|
|
11
11
|
"created": "2023-08-19T23:54:18.668094",
|
|
12
|
-
"modified": "2025-
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
11
|
-
<a href="https://
|
|
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
|
-
|
|
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
|
|
4
|
+
from typing import Union
|
|
5
5
|
|
|
6
6
|
# see requirements.txt
|
|
7
7
|
from github import Auth, Github
|
|
@@ -26,11 +26,11 @@ client = Github(auth=auth)
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
@functools.lru_cache
|
|
29
|
-
def github_user(user_id:
|
|
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
|
|
|
33
|
-
|
|
33
|
+
Args:
|
|
34
34
|
user_id (Optional[str]): The ID of the user to retrieve.
|
|
35
35
|
If not provided, retrieve the authenticated user.
|
|
36
36
|
|
|
@@ -46,12 +46,12 @@ 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:
|
|
50
|
-
repo_id:
|
|
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
|
|
|
54
|
-
|
|
54
|
+
Args:
|
|
55
55
|
user_id (Optional[str]): The ID of the user whose repositories to retrieve.
|
|
56
56
|
If not provided, retrieve repositories of the authenticated user.
|
|
57
57
|
repo_id (Optional[str]): The ID of the repository to retrieve.
|
|
@@ -74,11 +74,11 @@ def github_repositories(
|
|
|
74
74
|
|
|
75
75
|
def github_commits(
|
|
76
76
|
repo: Repository,
|
|
77
|
-
commit_id:
|
|
77
|
+
commit_id: str | None = None) -> Iterable[Commit]:
|
|
78
78
|
"""
|
|
79
79
|
Retrieve commits from a GitHub repository.
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Args:
|
|
82
82
|
repo (Repository): The GitHub repository object from which to retrieve commits.
|
|
83
83
|
commit_id (str, optional): The ID of the commit to retrieve.
|
|
84
84
|
If provided, only that commit will be returned.
|
|
@@ -111,11 +111,11 @@ def github_commits(
|
|
|
111
111
|
|
|
112
112
|
def github_files(
|
|
113
113
|
commit: Commit,
|
|
114
|
-
file_id:
|
|
114
|
+
file_id: str | None = None) -> Iterable[File]:
|
|
115
115
|
"""
|
|
116
116
|
Retrieves Files from a GitHub Commit
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
Args:
|
|
119
119
|
commit (Commit): A Commit object from the GitHub API.
|
|
120
120
|
file_id (Optional[str]): An optional parameter specifying the filename to filter the files. Default is None.
|
|
121
121
|
|
|
@@ -4,7 +4,6 @@ It recursively fetches followers of a given user up to a specified maximum depth
|
|
|
4
4
|
The function yields edges between users in the graph.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
from _client import github_user # see _client.py
|
|
10
9
|
|
|
@@ -26,7 +25,7 @@ def followers_graph_model(max_depth: int = DEPTH):
|
|
|
26
25
|
|
|
27
26
|
graph_model = graphinate.model(name='Github Followers Graph')
|
|
28
27
|
|
|
29
|
-
def _followers(user_id:
|
|
28
|
+
def _followers(user_id: str | None = None, depth: int = 0, **kwargs):
|
|
30
29
|
user = github_user(user_id)
|
|
31
30
|
for follower in user.get_followers():
|
|
32
31
|
yield {'source': user.login, 'target': follower.login}
|
|
@@ -34,7 +33,7 @@ def followers_graph_model(max_depth: int = DEPTH):
|
|
|
34
33
|
yield from _followers(follower.login, depth=depth + 1, **kwargs)
|
|
35
34
|
|
|
36
35
|
@graph_model.edge()
|
|
37
|
-
def followed_by(user_id:
|
|
36
|
+
def followed_by(user_id: str | None = None, **kwargs):
|
|
38
37
|
yield from _followers(user_id, **kwargs)
|
|
39
38
|
|
|
40
39
|
return graph_model
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import itertools
|
|
2
2
|
import operator
|
|
3
3
|
import pathlib
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from _client import github_commits, github_files, github_repositories, github_user # see _client.py
|
|
7
6
|
|
|
@@ -19,10 +18,10 @@ def repo_graph_model(): # noqa: C901
|
|
|
19
18
|
graph_model = graphinate.model(name='GitHub Repository Graph')
|
|
20
19
|
|
|
21
20
|
@graph_model.edge()
|
|
22
|
-
def github(user_id:
|
|
23
|
-
repository_id:
|
|
24
|
-
commit_id:
|
|
25
|
-
file_id:
|
|
21
|
+
def github(user_id: str | None = None,
|
|
22
|
+
repository_id: str | None = None,
|
|
23
|
+
commit_id: str | None = None,
|
|
24
|
+
file_id: str | None = None,
|
|
26
25
|
**kwargs):
|
|
27
26
|
user = github_user(user_id)
|
|
28
27
|
for repo in github_repositories(user_id, repository_id):
|
|
@@ -62,28 +61,28 @@ def repo_graph_model(): # noqa: C901
|
|
|
62
61
|
label=operator.itemgetter('filename'))
|
|
63
62
|
|
|
64
63
|
@user_node
|
|
65
|
-
def user(user_id:
|
|
64
|
+
def user(user_id: str | None = None, **kwargs):
|
|
66
65
|
yield github_user(user_id)
|
|
67
66
|
|
|
68
67
|
@repository_node
|
|
69
|
-
def repository(user_id:
|
|
70
|
-
repository_id:
|
|
68
|
+
def repository(user_id: str | None = None,
|
|
69
|
+
repository_id: str | None = None,
|
|
71
70
|
**kwargs):
|
|
72
71
|
repos = github_repositories(user_id, repository_id)
|
|
73
72
|
yield from repos
|
|
74
73
|
|
|
75
74
|
@commit_node
|
|
76
|
-
def commit(user_id:
|
|
77
|
-
repository_id:
|
|
78
|
-
commit_id:
|
|
75
|
+
def commit(user_id: str | None = None,
|
|
76
|
+
repository_id: str | None = None,
|
|
77
|
+
commit_id: str | None = None,
|
|
79
78
|
**kwargs):
|
|
80
79
|
for repo in github_repositories(user_id, repository_id):
|
|
81
80
|
yield from github_commits(repo, commit_id)
|
|
82
81
|
|
|
83
|
-
def file_type(user_id:
|
|
84
|
-
repository_id:
|
|
85
|
-
commit_id:
|
|
86
|
-
file_type_id:
|
|
82
|
+
def file_type(user_id: str | None = None,
|
|
83
|
+
repository_id: str | None = None,
|
|
84
|
+
commit_id: str | None = None,
|
|
85
|
+
file_type_id: str | None = None,
|
|
87
86
|
**kwargs):
|
|
88
87
|
def group_key(file):
|
|
89
88
|
return pathlib.PurePath(file).suffix
|
|
@@ -97,10 +96,10 @@ def repo_graph_model(): # noqa: C901
|
|
|
97
96
|
))
|
|
98
97
|
|
|
99
98
|
@file_node
|
|
100
|
-
def file(user_id:
|
|
101
|
-
repository_id:
|
|
102
|
-
commit_id:
|
|
103
|
-
file_id:
|
|
99
|
+
def file(user_id: str | None = None,
|
|
100
|
+
repository_id: str | None = None,
|
|
101
|
+
commit_id: str | None = None,
|
|
102
|
+
file_id: str | None = None,
|
|
104
103
|
**kwargs):
|
|
105
104
|
for repo in github_repositories(user_id, repository_id):
|
|
106
105
|
for commit in github_commits(repo, commit_id):
|