Graphinate 0.7.0__tar.gz → 0.8.1__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.1/.coveragerc +3 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/workflows/codeql.yml +5 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/workflows/publish-docs.yaml +1 -1
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/workflows/test.yml +6 -1
- {graphinate-0.7.0 → graphinate-0.8.1}/PKG-INFO +111 -31
- {graphinate-0.7.0 → graphinate-0.8.1}/README.md +108 -29
- graphinate-0.8.1/docs/.dates_cache.json +86 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/acknowledge.md +8 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/examples/code.md +12 -7
- graphinate-0.8.1/docs/examples/social.md +15 -0
- graphinate-0.8.1/docs/examples/web.md +35 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/gen_ref_pages.py +1 -1
- graphinate-0.8.1/docs/index.md +4 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/intro.md +46 -21
- graphinate-0.8.1/docs/start.md +76 -0
- graphinate-0.8.1/docs/tutorial.md +345 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/usage/cli.md +1 -1
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/usage/lib.md +5 -19
- graphinate-0.8.1/examples/code/git_commits.py +59 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/code/python_ast.py +48 -7
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/code/python_dependencies.py +2 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/code/requirements.txt +1 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/code/tokens.py +2 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/followers.py +4 -12
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/repositories.py +2 -2
- graphinate-0.7.0/tests/graphinate/test_materializers.py → graphinate-0.8.1/examples/math/_test_materializers.py +10 -9
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/math/graph_atlas.py +3 -2
- graphinate-0.7.0/src/graphinate/materializers/__init__.py → graphinate-0.8.1/examples/math/materializers.py +6 -9
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/math/polygonal_graph.py +11 -24
- graphinate-0.8.1/examples/science/caffeine.py +44 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/music_artists.py +2 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/system/files.py +3 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/system/processes.py +11 -24
- {graphinate-0.7.0/examples/code → graphinate-0.8.1/examples/web}/html_dom.py +2 -6
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/web/page_links.py +3 -8
- {graphinate-0.7.0 → graphinate-0.8.1}/mkdocs.yml +22 -13
- {graphinate-0.7.0 → graphinate-0.8.1}/pyproject.toml +5 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/__init__.py +6 -5
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/builders.py +39 -8
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/cli.py +10 -13
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/color.py +5 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/constants.py +2 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/converters.py +19 -15
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/modeling.py +4 -4
- graphinate-0.8.1/src/graphinate/renderers/__init__.py +5 -0
- graphinate-0.7.0/src/graphinate/server/__init__.py → graphinate-0.8.1/src/graphinate/renderers/graphql.py +15 -14
- {graphinate-0.7.0/src/graphinate/materializers → graphinate-0.8.1/src/graphinate/renderers}/matplotlib.py +5 -3
- graphinate-0.8.1/src/graphinate/server/web/viewer/__init__.py +0 -0
- graphinate-0.8.1/src/graphinate/server/web/voyager/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/typing.py +4 -4
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_builders.py +15 -1
- graphinate-0.7.0/.coveragerc +0 -3
- graphinate-0.7.0/STATS.md +0 -18
- graphinate-0.7.0/docs/dev.md +0 -35
- graphinate-0.7.0/docs/examples/social.md +0 -15
- graphinate-0.7.0/docs/examples/web.md +0 -18
- graphinate-0.7.0/docs/index.md +0 -69
- graphinate-0.7.0/docs/start.md +0 -47
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/dependabot.yml +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/workflows/publish.yml +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/.github/workflows/test-beta.yml +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/.gitignore +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/.sonarcloud.properties +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/LICENSE +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/assets/badge/v0.json +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/assets/images/logo-128.png +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/assets/images/network_graph.png +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/assets/stylesheets/extra.css +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/examples/github.md +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/examples/math.md +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/docs/examples/system.md +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/_client.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/commits_visibilty_graph.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/followers.graphql +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/graphql.config.yml +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/repositories.graphql +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/github/requirements.txt +0 -0
- {graphinate-0.7.0/src/graphinate/server/web/elements → graphinate-0.8.1/examples/math}/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/math/graphs.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/math/gui.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/math/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/13/dd/73ce25face7beb30b69b64feeb77.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/21/9e/00846f323987ba16cfbe0127d8eb.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/70/b6/2aefb0269adce7fedf877fa0d267.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/87/f5/ec1739bc369e84c3fcb302bf532a.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/ba/fe/3aca7b2c38abff60e7ce5eb486a8.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/c7/9e/ce82b0288020b7152779df09bd73.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/cache.db +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/d2/53/3b88f2fc162561cfdbbe9abc352a.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/cache/e2/d5/5d079f200eabf9b625b0473f6fbe.val +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/gui.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/social/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/system/.ignore +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/system/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/examples/web/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/ethernet/traceroute.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/genric_graph.graphql +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/graphql.config.yml +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/house_of_graphs.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/social/albums.json +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/social/musicisians.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/text/nlp_graph.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/text/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/time_series/requirements.txt +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/playground/time_series/visibility_graph.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/sonar-project.properties +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/__main__.py +0 -0
- {graphinate-0.7.0/src/graphinate/server/web/graphiql → graphinate-0.8.1/src/graphinate/server}/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/starlette/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/starlette/views.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/__init__.py +0 -0
- {graphinate-0.7.0/src/graphinate/server/web/rapidoc → graphinate-0.8.1/src/graphinate/server/web/elements}/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/elements/index.html +0 -0
- {graphinate-0.7.0/src/graphinate/server/web/viewer → graphinate-0.8.1/src/graphinate/server/web/graphiql}/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/graphiql/index.html +0 -0
- {graphinate-0.7.0/src/graphinate/server/web/voyager → graphinate-0.8.1/src/graphinate/server/web/rapidoc}/__init__.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/rapidoc/index.html +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/static/images/logo-128.png +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/static/images/logo.svg +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/static/images/network_graph.png +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/viewer/index.html +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/server/web/voyager/index.html +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/src/graphinate/tools.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/conftest.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_cli.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_color.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_converters.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_modeling.py +0 -0
- {graphinate-0.7.0 → graphinate-0.8.1}/tests/graphinate/test_server.py +0 -0
|
@@ -13,10 +13,10 @@ name: "CodeQL"
|
|
|
13
13
|
|
|
14
14
|
on:
|
|
15
15
|
push:
|
|
16
|
-
branches: [ "
|
|
16
|
+
branches: [ "main" ]
|
|
17
17
|
pull_request:
|
|
18
18
|
# The branches below must be a subset of the branches above
|
|
19
|
-
branches: [ "
|
|
19
|
+
branches: [ "main" ]
|
|
20
20
|
schedule:
|
|
21
21
|
- cron: '44 6 * * 4'
|
|
22
22
|
|
|
@@ -50,7 +50,7 @@ jobs:
|
|
|
50
50
|
|
|
51
51
|
# Initializes the CodeQL tools for scanning.
|
|
52
52
|
- name: Initialize CodeQL
|
|
53
|
-
uses: github/codeql-action/init@
|
|
53
|
+
uses: github/codeql-action/init@v3
|
|
54
54
|
with:
|
|
55
55
|
languages: ${{ matrix.language }}
|
|
56
56
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -64,7 +64,7 @@ jobs:
|
|
|
64
64
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
|
65
65
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
66
66
|
- name: Autobuild
|
|
67
|
-
uses: github/codeql-action/autobuild@
|
|
67
|
+
uses: github/codeql-action/autobuild@v3
|
|
68
68
|
|
|
69
69
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
70
70
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
|
@@ -77,6 +77,6 @@ jobs:
|
|
|
77
77
|
# ./location_of_script_within_repo/buildscript.sh
|
|
78
78
|
|
|
79
79
|
- name: Perform CodeQL Analysis
|
|
80
|
-
uses: github/codeql-action/analyze@
|
|
80
|
+
uses: github/codeql-action/analyze@v3
|
|
81
81
|
with:
|
|
82
82
|
category: "/language:${{matrix.language}}"
|
|
@@ -25,5 +25,5 @@ jobs:
|
|
|
25
25
|
pip install uv
|
|
26
26
|
uv venv
|
|
27
27
|
source .venv/bin/activate
|
|
28
|
-
uv pip install mkdocs-material mkdocstrings-python mkdocs-git-revision-date-localized-plugin mkdocs-gen-files mkdocs-glightbox mkdocs-literate-nav mkdocs-section-index
|
|
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
|
|
29
29
|
mkdocs gh-deploy --force
|
|
@@ -38,11 +38,16 @@ jobs:
|
|
|
38
38
|
- name: Test with pytest
|
|
39
39
|
run: |
|
|
40
40
|
python -m pip install faker pytest pytest-asyncio pytest-cov pytest-randomly pytest-xdist starlette-prometheus uvicorn[standard]
|
|
41
|
-
pytest tests --cov=src --cov-branch --cov-report=xml --junitxml=
|
|
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
|
|
44
44
|
with:
|
|
45
45
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
46
|
+
- name: Upload test results to Codecov
|
|
47
|
+
if: ${{ !cancelled() }}
|
|
48
|
+
uses: codecov/test-results-action@v1
|
|
49
|
+
with:
|
|
50
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
46
51
|
- name: Run codacy-coverage-reporter
|
|
47
52
|
uses: codacy/codacy-coverage-reporter-action@v1.3.0
|
|
48
53
|
with:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Graphinate
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.8.1
|
|
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
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/erivlis/graphinate/issues
|
|
@@ -33,6 +33,7 @@ Requires-Dist: loguru
|
|
|
33
33
|
Requires-Dist: mappingtools
|
|
34
34
|
Requires-Dist: matplotlib
|
|
35
35
|
Requires-Dist: networkx
|
|
36
|
+
Requires-Dist: networkx-mermaid>=0.1.0
|
|
36
37
|
Requires-Dist: strawberry-graphql[asgi,opentelemetry]
|
|
37
38
|
Provides-Extra: plot
|
|
38
39
|
Requires-Dist: scipy; extra == 'plot'
|
|
@@ -41,7 +42,7 @@ Requires-Dist: starlette-prometheus; extra == 'server'
|
|
|
41
42
|
Requires-Dist: uvicorn[standard]; extra == 'server'
|
|
42
43
|
Description-Content-Type: text/markdown
|
|
43
44
|
|
|
44
|
-
# [
|
|
45
|
+
# [Graphinate. Data to Graphs.](https://erivlis.github.io/graphinate/)
|
|
45
46
|
|
|
46
47
|
<img height="360" src="https://github.com/erivlis/graphinate/assets/9897520/dae41f9f-69e5-4eb5-a488-87ce7f51fa32" alt="Graphinate. Data to Graphs.">
|
|
47
48
|
|
|
@@ -118,6 +119,38 @@ Description-Content-Type: text/markdown
|
|
|
118
119
|
</tr>
|
|
119
120
|
</table>
|
|
120
121
|
|
|
122
|
+
## Table of Contents
|
|
123
|
+
|
|
124
|
+
- [Introduction](#introduction)
|
|
125
|
+
- [What is Graphinate?](#what-is-graphinate)
|
|
126
|
+
- [Links](#links)
|
|
127
|
+
- [Quick Start](#quick-start)
|
|
128
|
+
- [Install](#install)
|
|
129
|
+
- [Example](#example)
|
|
130
|
+
- [CLI](#cli)
|
|
131
|
+
- [Commands](#commands)
|
|
132
|
+
- [Save](#save)
|
|
133
|
+
- [Server](#server)
|
|
134
|
+
- [Gallery](#gallery)
|
|
135
|
+
- [Python AST](#python-ast)
|
|
136
|
+
- [GitHub Repository](#github-repository)
|
|
137
|
+
- [Python AST - 3D Force-Directed Animation](#python-ast---3d-force-directed-animation)
|
|
138
|
+
- [Web Page Links](#web-page-links)
|
|
139
|
+
- [Development](#development)
|
|
140
|
+
- [Ruff](#ruff)
|
|
141
|
+
- [Test](#test)
|
|
142
|
+
- [Standard (cobertura) XML Coverage Report](#standard-cobertura-xml-coverage-report)
|
|
143
|
+
- [HTML Coverage Report](#html-coverage-report)
|
|
144
|
+
- [Docs](#docs)
|
|
145
|
+
- [test](#test-1)
|
|
146
|
+
- [build](#build)
|
|
147
|
+
- [Acknowledgements](#acknowledgements)
|
|
148
|
+
- [Dependencies](#dependencies)
|
|
149
|
+
- [Python](#python)
|
|
150
|
+
- [Javascript and HTML](#javascript-and-html)
|
|
151
|
+
- [Dev Tools](#dev-tools)
|
|
152
|
+
- [IDE](#ide)
|
|
153
|
+
|
|
121
154
|
## Introduction
|
|
122
155
|
|
|
123
156
|
### What is Graphinate?
|
|
@@ -162,11 +195,11 @@ import graphinate
|
|
|
162
195
|
|
|
163
196
|
N: int = 8
|
|
164
197
|
|
|
165
|
-
# Define a GraphModel
|
|
198
|
+
# First Define a GraphModel instance.
|
|
199
|
+
# It will be used to hold the graph definitions
|
|
166
200
|
graph_model: graphinate.GraphModel = graphinate.model(name="Octagonal Graph")
|
|
167
201
|
|
|
168
|
-
|
|
169
|
-
# Register in the Graph Model the edges' supplier function
|
|
202
|
+
# Register in the Graph Model the edges' supplier generator function
|
|
170
203
|
@graph_model.edge()
|
|
171
204
|
def edge():
|
|
172
205
|
for i in range(N):
|
|
@@ -174,24 +207,35 @@ def edge():
|
|
|
174
207
|
yield {'source': N, 'target': 0}
|
|
175
208
|
|
|
176
209
|
|
|
177
|
-
#
|
|
178
|
-
builder
|
|
210
|
+
# Use the NetworkX Builder
|
|
211
|
+
builder = graphinate.builders.NetworkxBuilder(graph_model)
|
|
179
212
|
|
|
180
|
-
#
|
|
181
|
-
|
|
182
|
-
|
|
213
|
+
# build the NetworkX GraphRepresentation
|
|
214
|
+
# the output in this case is a nx.Graph instance
|
|
215
|
+
graph = builder.build()
|
|
216
|
+
|
|
217
|
+
# this supplied plot method uses matplotlib to display the graph
|
|
218
|
+
graphinate.matplotlib.plot(graph, with_edge_labels=True)
|
|
219
|
+
|
|
220
|
+
# or use the Mermaid Builder
|
|
221
|
+
builder = graphinate.builders.MermaidBuilder(graph_model)
|
|
183
222
|
|
|
184
|
-
|
|
223
|
+
# to create a Mermaid diagram
|
|
224
|
+
diagram: str = builder.build()
|
|
185
225
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
226
|
+
# and get Markdown or single page HTML to display it
|
|
227
|
+
mermaid_markdown: str = graphinate.mermaid.markdown(diagram)
|
|
228
|
+
mermaid_html: str = graphinate.mermaid.html(diagram, title=graph_model.name)
|
|
189
229
|
|
|
190
|
-
|
|
230
|
+
# or use the GraphQL Builder
|
|
231
|
+
builder = graphinate.builders.GraphQLBuilder(graph_model)
|
|
191
232
|
|
|
192
|
-
|
|
193
|
-
|
|
233
|
+
# to create a Strawberry GraphQL schema
|
|
234
|
+
schema = builder.build()
|
|
194
235
|
|
|
236
|
+
# and serve it using Uvicorn web server
|
|
237
|
+
graphinate.graphql.server(schema)
|
|
238
|
+
```
|
|
195
239
|
## CLI
|
|
196
240
|
|
|
197
241
|
### Commands
|
|
@@ -238,44 +282,76 @@ Options:
|
|
|
238
282
|
|
|
239
283
|
## Gallery
|
|
240
284
|
|
|
241
|
-
### Python AST
|
|
242
|
-
|
|
243
|
-

|
|
285
|
+
### Python Class AST
|
|
244
286
|
|
|
245
|
-
|
|
287
|
+
#### matplotlib
|
|
246
288
|
|
|
247
|
-

|
|
248
290
|
|
|
249
|
-
|
|
291
|
+
#### 3D Force-Directed Animation
|
|
250
292
|
|
|
251
293
|
<video width="400" controls>
|
|
252
294
|
<source src="https://github.com/erivlis/graphinate/assets/9897520/2e9a53b1-5686-4683-a0e4-fbffa850a27b" type="video/mp4">
|
|
253
295
|
</video>
|
|
254
296
|
|
|
255
|
-
###
|
|
297
|
+
### GitHub Repository
|
|
298
|
+
|
|
299
|
+

|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
### Web Links
|
|
256
303
|
|
|
257
304
|

|
|
258
305
|
|
|
259
306
|
## Development
|
|
260
307
|
|
|
308
|
+
### Install dependencies
|
|
309
|
+
|
|
310
|
+
Use UV to install all dependencies
|
|
311
|
+
|
|
312
|
+
```shell
|
|
313
|
+
uv sync --all-extras --all-groups
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Update dependencies
|
|
317
|
+
|
|
318
|
+
```shell
|
|
319
|
+
uv lock --upgrade
|
|
320
|
+
uv sync --all-extras --all-groups
|
|
321
|
+
```
|
|
322
|
+
|
|
261
323
|
### Ruff
|
|
262
324
|
|
|
325
|
+
#### Report issues
|
|
326
|
+
|
|
263
327
|
```shell
|
|
264
328
|
ruff check src
|
|
265
329
|
```
|
|
266
330
|
|
|
331
|
+
#### Fix issues
|
|
332
|
+
|
|
333
|
+
```shell
|
|
334
|
+
ruff check src --fix
|
|
335
|
+
```
|
|
336
|
+
|
|
267
337
|
### Test
|
|
268
338
|
|
|
269
339
|
#### Standard (cobertura) XML Coverage Report
|
|
270
340
|
|
|
271
341
|
```shell
|
|
272
|
-
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=
|
|
342
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=junit.xml
|
|
273
343
|
```
|
|
274
344
|
|
|
275
345
|
#### HTML Coverage Report
|
|
276
346
|
|
|
277
347
|
```shell
|
|
278
|
-
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=
|
|
348
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=junit.xml
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
#### Terminal Coverage Report
|
|
352
|
+
|
|
353
|
+
```shell
|
|
354
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=term --junitxml=junit.xml
|
|
279
355
|
```
|
|
280
356
|
|
|
281
357
|
### Docs
|
|
@@ -320,10 +396,14 @@ python -m mkdocs build
|
|
|
320
396
|
|
|
321
397
|
### IDE
|
|
322
398
|
|
|
323
|
-
<a href="https://www.jetbrains.com/pycharm/"><img height="60" style="background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo"></a>
|
|
399
|
+
<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
|
+
|
|
401
|
+
--------------------------------
|
|
402
|
+
|
|
403
|
+

|
|
324
404
|
|
|
325
|
-
|
|
405
|
+
--------------------------------
|
|
326
406
|
|
|
327
|
-
<img alt="
|
|
407
|
+
<img alt="Work on my Machine" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
|
|
328
408
|
|
|
329
|
-
Copyright © 2023 Eran Rivlis
|
|
409
|
+
Copyright © 2023-2025 Eran Rivlis
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# [
|
|
1
|
+
# [Graphinate. Data to Graphs.](https://erivlis.github.io/graphinate/)
|
|
2
2
|
|
|
3
3
|
<img height="360" src="https://github.com/erivlis/graphinate/assets/9897520/dae41f9f-69e5-4eb5-a488-87ce7f51fa32" alt="Graphinate. Data to Graphs.">
|
|
4
4
|
|
|
@@ -75,6 +75,38 @@
|
|
|
75
75
|
</tr>
|
|
76
76
|
</table>
|
|
77
77
|
|
|
78
|
+
## Table of Contents
|
|
79
|
+
|
|
80
|
+
- [Introduction](#introduction)
|
|
81
|
+
- [What is Graphinate?](#what-is-graphinate)
|
|
82
|
+
- [Links](#links)
|
|
83
|
+
- [Quick Start](#quick-start)
|
|
84
|
+
- [Install](#install)
|
|
85
|
+
- [Example](#example)
|
|
86
|
+
- [CLI](#cli)
|
|
87
|
+
- [Commands](#commands)
|
|
88
|
+
- [Save](#save)
|
|
89
|
+
- [Server](#server)
|
|
90
|
+
- [Gallery](#gallery)
|
|
91
|
+
- [Python AST](#python-ast)
|
|
92
|
+
- [GitHub Repository](#github-repository)
|
|
93
|
+
- [Python AST - 3D Force-Directed Animation](#python-ast---3d-force-directed-animation)
|
|
94
|
+
- [Web Page Links](#web-page-links)
|
|
95
|
+
- [Development](#development)
|
|
96
|
+
- [Ruff](#ruff)
|
|
97
|
+
- [Test](#test)
|
|
98
|
+
- [Standard (cobertura) XML Coverage Report](#standard-cobertura-xml-coverage-report)
|
|
99
|
+
- [HTML Coverage Report](#html-coverage-report)
|
|
100
|
+
- [Docs](#docs)
|
|
101
|
+
- [test](#test-1)
|
|
102
|
+
- [build](#build)
|
|
103
|
+
- [Acknowledgements](#acknowledgements)
|
|
104
|
+
- [Dependencies](#dependencies)
|
|
105
|
+
- [Python](#python)
|
|
106
|
+
- [Javascript and HTML](#javascript-and-html)
|
|
107
|
+
- [Dev Tools](#dev-tools)
|
|
108
|
+
- [IDE](#ide)
|
|
109
|
+
|
|
78
110
|
## Introduction
|
|
79
111
|
|
|
80
112
|
### What is Graphinate?
|
|
@@ -119,11 +151,11 @@ import graphinate
|
|
|
119
151
|
|
|
120
152
|
N: int = 8
|
|
121
153
|
|
|
122
|
-
# Define a GraphModel
|
|
154
|
+
# First Define a GraphModel instance.
|
|
155
|
+
# It will be used to hold the graph definitions
|
|
123
156
|
graph_model: graphinate.GraphModel = graphinate.model(name="Octagonal Graph")
|
|
124
157
|
|
|
125
|
-
|
|
126
|
-
# Register in the Graph Model the edges' supplier function
|
|
158
|
+
# Register in the Graph Model the edges' supplier generator function
|
|
127
159
|
@graph_model.edge()
|
|
128
160
|
def edge():
|
|
129
161
|
for i in range(N):
|
|
@@ -131,24 +163,35 @@ def edge():
|
|
|
131
163
|
yield {'source': N, 'target': 0}
|
|
132
164
|
|
|
133
165
|
|
|
134
|
-
#
|
|
135
|
-
builder
|
|
166
|
+
# Use the NetworkX Builder
|
|
167
|
+
builder = graphinate.builders.NetworkxBuilder(graph_model)
|
|
136
168
|
|
|
137
|
-
#
|
|
138
|
-
|
|
139
|
-
|
|
169
|
+
# build the NetworkX GraphRepresentation
|
|
170
|
+
# the output in this case is a nx.Graph instance
|
|
171
|
+
graph = builder.build()
|
|
172
|
+
|
|
173
|
+
# this supplied plot method uses matplotlib to display the graph
|
|
174
|
+
graphinate.matplotlib.plot(graph, with_edge_labels=True)
|
|
175
|
+
|
|
176
|
+
# or use the Mermaid Builder
|
|
177
|
+
builder = graphinate.builders.MermaidBuilder(graph_model)
|
|
140
178
|
|
|
141
|
-
|
|
179
|
+
# to create a Mermaid diagram
|
|
180
|
+
diagram: str = builder.build()
|
|
142
181
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
182
|
+
# and get Markdown or single page HTML to display it
|
|
183
|
+
mermaid_markdown: str = graphinate.mermaid.markdown(diagram)
|
|
184
|
+
mermaid_html: str = graphinate.mermaid.html(diagram, title=graph_model.name)
|
|
146
185
|
|
|
147
|
-
|
|
186
|
+
# or use the GraphQL Builder
|
|
187
|
+
builder = graphinate.builders.GraphQLBuilder(graph_model)
|
|
148
188
|
|
|
149
|
-
|
|
150
|
-
|
|
189
|
+
# to create a Strawberry GraphQL schema
|
|
190
|
+
schema = builder.build()
|
|
151
191
|
|
|
192
|
+
# and serve it using Uvicorn web server
|
|
193
|
+
graphinate.graphql.server(schema)
|
|
194
|
+
```
|
|
152
195
|
## CLI
|
|
153
196
|
|
|
154
197
|
### Commands
|
|
@@ -195,44 +238,76 @@ Options:
|
|
|
195
238
|
|
|
196
239
|
## Gallery
|
|
197
240
|
|
|
198
|
-
### Python AST
|
|
199
|
-
|
|
200
|
-

|
|
241
|
+
### Python Class AST
|
|
201
242
|
|
|
202
|
-
|
|
243
|
+
#### matplotlib
|
|
203
244
|
|
|
204
|
-

|
|
205
246
|
|
|
206
|
-
|
|
247
|
+
#### 3D Force-Directed Animation
|
|
207
248
|
|
|
208
249
|
<video width="400" controls>
|
|
209
250
|
<source src="https://github.com/erivlis/graphinate/assets/9897520/2e9a53b1-5686-4683-a0e4-fbffa850a27b" type="video/mp4">
|
|
210
251
|
</video>
|
|
211
252
|
|
|
212
|
-
###
|
|
253
|
+
### GitHub Repository
|
|
254
|
+
|
|
255
|
+

|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
### Web Links
|
|
213
259
|
|
|
214
260
|

|
|
215
261
|
|
|
216
262
|
## Development
|
|
217
263
|
|
|
264
|
+
### Install dependencies
|
|
265
|
+
|
|
266
|
+
Use UV to install all dependencies
|
|
267
|
+
|
|
268
|
+
```shell
|
|
269
|
+
uv sync --all-extras --all-groups
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Update dependencies
|
|
273
|
+
|
|
274
|
+
```shell
|
|
275
|
+
uv lock --upgrade
|
|
276
|
+
uv sync --all-extras --all-groups
|
|
277
|
+
```
|
|
278
|
+
|
|
218
279
|
### Ruff
|
|
219
280
|
|
|
281
|
+
#### Report issues
|
|
282
|
+
|
|
220
283
|
```shell
|
|
221
284
|
ruff check src
|
|
222
285
|
```
|
|
223
286
|
|
|
287
|
+
#### Fix issues
|
|
288
|
+
|
|
289
|
+
```shell
|
|
290
|
+
ruff check src --fix
|
|
291
|
+
```
|
|
292
|
+
|
|
224
293
|
### Test
|
|
225
294
|
|
|
226
295
|
#### Standard (cobertura) XML Coverage Report
|
|
227
296
|
|
|
228
297
|
```shell
|
|
229
|
-
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=
|
|
298
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml --junitxml=junit.xml
|
|
230
299
|
```
|
|
231
300
|
|
|
232
301
|
#### HTML Coverage Report
|
|
233
302
|
|
|
234
303
|
```shell
|
|
235
|
-
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=
|
|
304
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html --junitxml=junit.xml
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### Terminal Coverage Report
|
|
308
|
+
|
|
309
|
+
```shell
|
|
310
|
+
python -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=term --junitxml=junit.xml
|
|
236
311
|
```
|
|
237
312
|
|
|
238
313
|
### Docs
|
|
@@ -277,10 +352,14 @@ python -m mkdocs build
|
|
|
277
352
|
|
|
278
353
|
### IDE
|
|
279
354
|
|
|
280
|
-
<a href="https://www.jetbrains.com/pycharm/"><img height="60" style="background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo"></a>
|
|
355
|
+
<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
|
+
|
|
357
|
+
--------------------------------
|
|
358
|
+
|
|
359
|
+

|
|
281
360
|
|
|
282
|
-
|
|
361
|
+
--------------------------------
|
|
283
362
|
|
|
284
|
-
<img alt="
|
|
363
|
+
<img alt="Work on my Machine" src="https://forthebadge.com/images/badges/works-on-my-machine.svg">
|
|
285
364
|
|
|
286
|
-
Copyright © 2023 Eran Rivlis
|
|
365
|
+
Copyright © 2023-2025 Eran Rivlis
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"acknowledge.md": {
|
|
3
|
+
"created": "2023-08-20T00:21:55.621436",
|
|
4
|
+
"modified": "2025-03-12T00:39:57.859235"
|
|
5
|
+
},
|
|
6
|
+
"index.md": {
|
|
7
|
+
"created": "2023-08-15T00:05:21.586874",
|
|
8
|
+
"modified": "2025-03-12T00:40:46.459147"
|
|
9
|
+
},
|
|
10
|
+
"intro.md": {
|
|
11
|
+
"created": "2023-08-19T23:54:18.668094",
|
|
12
|
+
"modified": "2025-03-11T23:24:02.836144"
|
|
13
|
+
},
|
|
14
|
+
"start.md": {
|
|
15
|
+
"created": "2023-08-20T00:07:42.683716",
|
|
16
|
+
"modified": "2025-03-11T23:45:05.567864"
|
|
17
|
+
},
|
|
18
|
+
"tutorial.md": {
|
|
19
|
+
"created": "2025-02-26T00:03:30.194156",
|
|
20
|
+
"modified": "2025-03-12T00:12:38.290310"
|
|
21
|
+
},
|
|
22
|
+
"examples\\code.md": {
|
|
23
|
+
"created": "2023-08-20T00:09:32.677003",
|
|
24
|
+
"modified": "2025-03-07T10:14:05.629365"
|
|
25
|
+
},
|
|
26
|
+
"examples\\github.md": {
|
|
27
|
+
"created": "2023-10-05T11:43:15.316025",
|
|
28
|
+
"modified": "2025-01-28T23:47:41.840220"
|
|
29
|
+
},
|
|
30
|
+
"examples\\math.md": {
|
|
31
|
+
"created": "2023-10-05T11:43:22.861997",
|
|
32
|
+
"modified": "2025-01-28T23:54:42.968373"
|
|
33
|
+
},
|
|
34
|
+
"examples\\social.md": {
|
|
35
|
+
"created": "2025-02-24T23:49:35.972953",
|
|
36
|
+
"modified": "2025-03-11T23:47:36.266891"
|
|
37
|
+
},
|
|
38
|
+
"examples\\system.md": {
|
|
39
|
+
"created": "2024-03-27T01:28:38.922865",
|
|
40
|
+
"modified": "2024-03-27T01:51:20.126046"
|
|
41
|
+
},
|
|
42
|
+
"examples\\web.md": {
|
|
43
|
+
"created": "2023-10-05T11:43:30.550657",
|
|
44
|
+
"modified": "2025-03-12T00:42:43.742512"
|
|
45
|
+
},
|
|
46
|
+
"reference\\SUMMARY.md": {
|
|
47
|
+
"created": "2025-03-08T20:51:52.801367",
|
|
48
|
+
"modified": "2025-03-08T20:51:52.807370"
|
|
49
|
+
},
|
|
50
|
+
"usage\\cli.md": {
|
|
51
|
+
"created": "2023-09-27T21:23:44.140564",
|
|
52
|
+
"modified": "2025-03-01T23:56:33.595498"
|
|
53
|
+
},
|
|
54
|
+
"usage\\lib.md": {
|
|
55
|
+
"created": "2023-09-27T21:23:44.133584",
|
|
56
|
+
"modified": "2025-03-12T00:30:12.961397"
|
|
57
|
+
},
|
|
58
|
+
"reference\\graphinate\\builders.md": {
|
|
59
|
+
"created": "2025-03-08T20:51:52.788270",
|
|
60
|
+
"modified": "2025-03-08T20:51:52.792269"
|
|
61
|
+
},
|
|
62
|
+
"reference\\graphinate\\index.md": {
|
|
63
|
+
"created": "2025-03-08T20:51:52.786270",
|
|
64
|
+
"modified": "2025-03-08T20:51:52.788270"
|
|
65
|
+
},
|
|
66
|
+
"reference\\graphinate\\modeling.md": {
|
|
67
|
+
"created": "2025-03-08T20:51:52.792269",
|
|
68
|
+
"modified": "2025-03-08T20:51:52.795269"
|
|
69
|
+
},
|
|
70
|
+
"reference\\graphinate\\typing.md": {
|
|
71
|
+
"created": "2025-03-08T20:51:52.800360",
|
|
72
|
+
"modified": "2025-03-08T20:51:52.805368"
|
|
73
|
+
},
|
|
74
|
+
"reference\\graphinate\\renderers\\graphql.md": {
|
|
75
|
+
"created": "2025-03-08T20:51:52.796358",
|
|
76
|
+
"modified": "2025-03-08T20:51:52.800360"
|
|
77
|
+
},
|
|
78
|
+
"reference\\graphinate\\renderers\\index.md": {
|
|
79
|
+
"created": "2025-03-08T20:51:52.794269",
|
|
80
|
+
"modified": "2025-03-08T20:51:52.798361"
|
|
81
|
+
},
|
|
82
|
+
"reference\\graphinate\\renderers\\matplotlib.md": {
|
|
83
|
+
"created": "2025-03-08T20:51:52.798361",
|
|
84
|
+
"modified": "2025-03-08T20:51:52.803367"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -14,15 +14,18 @@
|
|
|
14
14
|
|
|
15
15
|
<a href="https://vasturiano.github.io/3d-force-graph/"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="http://gist.github.com/vasturiano/02affe306ce445e423f992faeea13521/raw/preview.png" alt="3D Force-Directed Graph Logo."></a>
|
|
16
16
|
<a href="https://github.com/graphql-kit/graphql-voyager"><img style="height: 50px; padding: 5px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://github.com/graphql-kit/graphql-voyager/raw/main/docs/cover.png" alt="Graphql Voyager Logo."></a>
|
|
17
|
+
<a href="https://github.com/cocopon/tweakpane"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://user-images.githubusercontent.com/602961/184479032-38f50be3-e235-4914-85c0-dce316b33ed2.png" alt="Tweakpane Logo"></a>
|
|
17
18
|
|
|
18
19
|
## Dev Tools
|
|
19
20
|
|
|
20
|
-
<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>
|
|
21
|
-
<a href="https://squidfunk.github.io/mkdocs-material/"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/logo.svg" alt="Material for MkDocs"></a>
|
|
22
|
-
<a href="https://pytest.org"><img style="height: 50px; background: linear-gradient(-45deg, #FFFFFF, #CCCCCC);" src="https://docs.pytest.org/en/7.4.x/_static/pytest_logo_curves.svg" alt="pytest logo."></a>
|
|
23
|
-
<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
21
|
<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
|
+
<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>
|
|
23
|
+
<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
|
+
<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
|
+
<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
|
+
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
## IDE
|
|
27
30
|
|
|
28
|
-
<a href="https://www.jetbrains.com/pycharm/"><img style="height: 50px; background: linear-gradient(-45deg, #FCF84A, #3DEA62, #21D789);" src="https://resources.jetbrains.com/storage/products/company/brand/logos/PyCharm.png" alt="PyCharm logo."></a>
|
|
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>
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
# Code
|
|
2
2
|
|
|
3
|
+
## GIT Commits
|
|
4
|
+
|
|
5
|
+
=== "GIT Commits"
|
|
6
|
+
|
|
7
|
+
``` python title="examples/code/git_commits.py" linenums="1"
|
|
8
|
+
--8<-- "examples/code/git_commits.py"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
3
13
|
## Python AST
|
|
4
14
|
|
|
5
15
|
=== "Python AST"
|
|
6
16
|
|
|
7
|
-
```
|
|
17
|
+
```python title="examples/code/python_ast.py" linenums="1"
|
|
8
18
|
--8<-- "examples/code/python_ast.py"
|
|
9
19
|
```
|
|
10
20
|
|
|
@@ -24,12 +34,7 @@
|
|
|
24
34
|
|
|
25
35
|
=== "Python Dependencies"
|
|
26
36
|
|
|
27
|
-
```
|
|
37
|
+
```python title="examples/code/python_dependencies.py" linenums="1"
|
|
28
38
|
--8<-- "examples/code/python_dependencies.py"
|
|
29
39
|
```
|
|
30
40
|
|
|
31
|
-
=== "Requirements"
|
|
32
|
-
|
|
33
|
-
``` text title="examples/code/requirements.txt" linenums="1"
|
|
34
|
-
--8<-- "examples/code/requirements.txt"
|
|
35
|
-
```
|