Graphinate 0.2.18__tar.gz → 0.2.20__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 (97) hide show
  1. {graphinate-0.2.18 → graphinate-0.2.20}/PKG-INFO +5 -5
  2. graphinate-0.2.20/docs/examples/system.md +15 -0
  3. graphinate-0.2.20/examples/code/requirements.txt +2 -0
  4. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/requirements.txt +1 -0
  5. graphinate-0.2.20/examples/math/requirements.txt +1 -0
  6. graphinate-0.2.20/examples/system/processes.py +69 -0
  7. graphinate-0.2.20/examples/system/requirements.txt +2 -0
  8. {graphinate-0.2.18 → graphinate-0.2.20}/pyproject.toml +5 -5
  9. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/graphiql/index.html +1 -1
  10. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/viewer/index.html +3 -2
  11. graphinate-0.2.18/examples/code/requirements.txt +0 -1
  12. {graphinate-0.2.18 → graphinate-0.2.20}/.coveragerc +0 -0
  13. {graphinate-0.2.18 → graphinate-0.2.20}/.github/dependabot.yml +0 -0
  14. {graphinate-0.2.18 → graphinate-0.2.20}/.github/workflows/codeql.yml +0 -0
  15. {graphinate-0.2.18 → graphinate-0.2.20}/.github/workflows/publish-docs.yaml +0 -0
  16. {graphinate-0.2.18 → graphinate-0.2.20}/.github/workflows/publish.yml +0 -0
  17. {graphinate-0.2.18 → graphinate-0.2.20}/.github/workflows/test-beta.yml +0 -0
  18. {graphinate-0.2.18 → graphinate-0.2.20}/.github/workflows/test.yml +0 -0
  19. {graphinate-0.2.18 → graphinate-0.2.20}/.gitignore +0 -0
  20. {graphinate-0.2.18 → graphinate-0.2.20}/LICENSE +0 -0
  21. {graphinate-0.2.18 → graphinate-0.2.20}/README.md +0 -0
  22. {graphinate-0.2.18 → graphinate-0.2.20}/STATS.md +0 -0
  23. {graphinate-0.2.18 → graphinate-0.2.20}/docs/acknowledge.md +0 -0
  24. {graphinate-0.2.18 → graphinate-0.2.20}/docs/assets/images/logo-128.png +0 -0
  25. {graphinate-0.2.18 → graphinate-0.2.20}/docs/assets/images/network_graph.png +0 -0
  26. {graphinate-0.2.18 → graphinate-0.2.20}/docs/assets/stylesheets/extra.css +0 -0
  27. {graphinate-0.2.18 → graphinate-0.2.20}/docs/dev.md +0 -0
  28. {graphinate-0.2.18 → graphinate-0.2.20}/docs/examples/code.md +0 -0
  29. {graphinate-0.2.18 → graphinate-0.2.20}/docs/examples/github.md +0 -0
  30. {graphinate-0.2.18 → graphinate-0.2.20}/docs/examples/math.md +0 -0
  31. {graphinate-0.2.18 → graphinate-0.2.20}/docs/examples/web.md +0 -0
  32. {graphinate-0.2.18 → graphinate-0.2.20}/docs/gen_ref_pages.py +0 -0
  33. {graphinate-0.2.18 → graphinate-0.2.20}/docs/index.md +0 -0
  34. {graphinate-0.2.18 → graphinate-0.2.20}/docs/intro.md +0 -0
  35. {graphinate-0.2.18 → graphinate-0.2.20}/docs/start.md +0 -0
  36. {graphinate-0.2.18 → graphinate-0.2.20}/docs/usage/cli.md +0 -0
  37. {graphinate-0.2.18 → graphinate-0.2.20}/docs/usage/lib.md +0 -0
  38. {graphinate-0.2.18 → graphinate-0.2.20}/examples/code/python_ast.py +0 -0
  39. {graphinate-0.2.18 → graphinate-0.2.20}/examples/code/python_dependencies.py +0 -0
  40. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/_client.py +0 -0
  41. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/commits_visibilty_graph.py +0 -0
  42. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/followers.graphql +0 -0
  43. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/followers.py +0 -0
  44. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/graphql.config.yml +0 -0
  45. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/repositories.graphql +0 -0
  46. {graphinate-0.2.18 → graphinate-0.2.20}/examples/github/repositories.py +0 -0
  47. {graphinate-0.2.18 → graphinate-0.2.20}/examples/math/graph_atlas.py +0 -0
  48. {graphinate-0.2.18 → graphinate-0.2.20}/examples/math/polygonal_graph.py +0 -0
  49. {graphinate-0.2.18 → graphinate-0.2.20}/examples/web/page_links.py +0 -0
  50. {graphinate-0.2.18 → graphinate-0.2.20}/examples/web/requirements.txt +0 -0
  51. {graphinate-0.2.18 → graphinate-0.2.20}/mkdocs.yml +0 -0
  52. {graphinate-0.2.18 → graphinate-0.2.20}/playground/ethernet/traceroute.py +0 -0
  53. {graphinate-0.2.18 → graphinate-0.2.20}/playground/genric_graph.graphql +0 -0
  54. {graphinate-0.2.18 → graphinate-0.2.20}/playground/graphql.config.yml +0 -0
  55. {graphinate-0.2.18 → graphinate-0.2.20}/playground/house_of_graphs.py +0 -0
  56. {graphinate-0.2.18 → graphinate-0.2.20}/playground/social/albums.json +0 -0
  57. {graphinate-0.2.18 → graphinate-0.2.20}/playground/social/musicisians.py +0 -0
  58. {graphinate-0.2.18 → graphinate-0.2.20}/playground/text/nlp_graph.py +0 -0
  59. {graphinate-0.2.18 → graphinate-0.2.20}/playground/text/requirements.txt +0 -0
  60. {graphinate-0.2.18 → graphinate-0.2.20}/playground/time_series/requirements.txt +0 -0
  61. {graphinate-0.2.18 → graphinate-0.2.20}/playground/time_series/visibility_graph.py +0 -0
  62. {graphinate-0.2.18 → graphinate-0.2.20}/sonar-project.properties +0 -0
  63. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/__init__.py +0 -0
  64. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/__main__.py +0 -0
  65. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/builders.py +0 -0
  66. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/cli.py +0 -0
  67. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/color.py +0 -0
  68. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/materializers/__init__.py +0 -0
  69. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/materializers/matplotlib.py +0 -0
  70. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/modeling.py +0 -0
  71. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/__init__.py +0 -0
  72. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/starlette/__init__.py +0 -0
  73. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/starlette/views.py +0 -0
  74. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/__init__.py +0 -0
  75. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/elements/__init__.py +0 -0
  76. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/elements/index.html +0 -0
  77. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/graphiql/__init__.py +0 -0
  78. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/rapidoc/__init__.py +0 -0
  79. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/rapidoc/index.html +0 -0
  80. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/static/images/logo-128.png +0 -0
  81. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/static/images/network_graph.png +0 -0
  82. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/viewer/__init__.py +0 -0
  83. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/voyager/__init__.py +0 -0
  84. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/server/web/voyager/index.html +0 -0
  85. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/tools/__init__.py +0 -0
  86. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/tools/converters.py +0 -0
  87. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/tools/gui.py +0 -0
  88. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/tools/mutators.py +0 -0
  89. {graphinate-0.2.18 → graphinate-0.2.20}/src/graphinate/typing.py +0 -0
  90. {graphinate-0.2.18 → graphinate-0.2.20}/tests/conftest.py +0 -0
  91. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_builders.py +0 -0
  92. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_cli.py +0 -0
  93. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_color.py +0 -0
  94. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_materializers.py +0 -0
  95. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_modeling.py +0 -0
  96. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_server.py +0 -0
  97. {graphinate-0.2.18 → graphinate-0.2.20}/tests/graphinate/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: Graphinate
3
- Version: 0.2.18
3
+ Version: 0.2.20
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
@@ -28,11 +28,11 @@ Classifier: Topic :: Software Development :: Libraries
28
28
  Classifier: Typing :: Typed
29
29
  Requires-Python: >=3.9
30
30
  Requires-Dist: click==8.1.7
31
- Requires-Dist: inflect==7.0.0
31
+ Requires-Dist: inflect==7.2.0
32
32
  Requires-Dist: loguru==0.7.2
33
- Requires-Dist: matplotlib==3.8.3
33
+ Requires-Dist: matplotlib==3.8.4
34
34
  Requires-Dist: networkx==3.2.1
35
- Requires-Dist: strawberry-graphql[asgi,opentelemetry]==0.221.1
35
+ Requires-Dist: strawberry-graphql[asgi,opentelemetry]==0.224.1
36
36
  Provides-Extra: dev
37
37
  Requires-Dist: pipdeptree; extra == 'dev'
38
38
  Requires-Dist: ruff; extra == 'dev'
@@ -52,7 +52,7 @@ Requires-Dist: uvicorn[standard]>=0.29.0; extra == 'server'
52
52
  Provides-Extra: test
53
53
  Requires-Dist: faker>=23.2.1; extra == 'test'
54
54
  Requires-Dist: pytest-asyncio>=0.23.5; extra == 'test'
55
- Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
55
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'test'
56
56
  Requires-Dist: pytest-randomly>=3.15.0; extra == 'test'
57
57
  Requires-Dist: pytest-xdist>=3.5.0; extra == 'test'
58
58
  Requires-Dist: pytest>=8.1.1; extra == 'test'
@@ -0,0 +1,15 @@
1
+ # System
2
+
3
+ ## Processes
4
+
5
+ === "Processes"
6
+
7
+ ``` python title="examples/system/processes.py" linenums="1"
8
+ --8<-- "examples/system/processes.py"
9
+ ```
10
+
11
+ === "Dependencies"
12
+
13
+ ``` text title="examples/system/requirements.txt" linenums="1"
14
+ --8<-- "examples/system/requirements.txt"
15
+ ```
@@ -0,0 +1,2 @@
1
+ graphinate
2
+ pipdeptree>=2.13.0
@@ -1 +1,2 @@
1
+ graphinate
1
2
  PyGithub==2.1.1
@@ -0,0 +1 @@
1
+ graphinate
@@ -0,0 +1,69 @@
1
+ import operator
2
+ from collections.abc import Iterable
3
+
4
+ import graphinate
5
+ import networkx as nx
6
+ import psutil
7
+
8
+
9
+ def processes_graph_model():
10
+ graph_model = graphinate.model("Processes Graph")
11
+
12
+ def processes() -> Iterable[psutil.Process]:
13
+ for pid in psutil.pids():
14
+ if psutil.pid_exists(pid):
15
+ yield psutil.Process(pid)
16
+
17
+ processes_list = [
18
+ {
19
+ 'pid': p.pid,
20
+ 'name': p.name(),
21
+ 'parent_pid': p.parent().pid if p.parent() else None
22
+ }
23
+ for p in processes()
24
+ ]
25
+
26
+ @graph_model.node(key=operator.itemgetter('pid'), label=operator.itemgetter('name'))
27
+ def process():
28
+ yield from processes_list
29
+
30
+ @graph_model.edge()
31
+ def edge():
32
+ for p in processes_list:
33
+ parent_pid = p.get('parent_pid')
34
+ if parent_pid:
35
+ yield {'source': p.get('pid'), 'target': parent_pid}
36
+
37
+ return graph_model
38
+
39
+
40
+ model = processes_graph_model()
41
+
42
+ if __name__ == '__main__':
43
+ use_materialize = True
44
+
45
+ if use_materialize:
46
+ # Materialize the GraphModel
47
+ graphinate.materialize(
48
+ model,
49
+ builder=graphinate.builders.GraphQLBuilder,
50
+ actualizer=graphinate.graphql
51
+ )
52
+
53
+ else:
54
+ # Or
55
+
56
+ # 1. Define Graph Builder
57
+ builder = graphinate.builders.NetworkxBuilder(model=model)
58
+
59
+ # Then
60
+ # 2. Build the Graph object
61
+ graph: nx.Graph = builder.build()
62
+
63
+ # Then
64
+ # 3. Option A - Output to console
65
+ print(graph)
66
+
67
+ # Or
68
+ # 3. Option B - Output as a plot
69
+ graphinate.materializers.plot(graph)
@@ -0,0 +1,2 @@
1
+ graphinate
2
+ psutil>=5.9.8
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "Graphinate"
3
- version = "0.2.18"
3
+ version = "0.2.20"
4
4
  authors = [
5
5
  { name = "Eran Rivlis", email = "eran@rivlis.info" },
6
6
  ]
@@ -29,11 +29,11 @@ classifiers = [
29
29
  keywords = ['graph', 'declarative']
30
30
  dependencies = [
31
31
  "click==8.1.7",
32
- "inflect==7.0.0",
32
+ "inflect==7.2.0",
33
33
  "loguru==0.7.2",
34
- "matplotlib==3.8.3",
34
+ "matplotlib==3.8.4",
35
35
  "networkx==3.2.1",
36
- "strawberry-graphql[asgi,opentelemetry]==0.221.1"
36
+ "strawberry-graphql[asgi,opentelemetry]==0.224.1"
37
37
  ]
38
38
 
39
39
 
@@ -62,7 +62,7 @@ test = [
62
62
  "faker>=23.2.1",
63
63
  "pytest>=8.1.1",
64
64
  "pytest-asyncio>=0.23.5",
65
- "pytest-cov>=4.1.0",
65
+ "pytest-cov>=5.0.0",
66
66
  "pytest-randomly>=3.15.0",
67
67
  "pytest-xdist>=3.5.0"
68
68
  ]
@@ -151,7 +151,7 @@
151
151
  });
152
152
  }
153
153
 
154
- ReactDOM.createRenderRoot(
154
+ ReactDOM.render(
155
155
  React.createElement(GraphiQLWithExplorer),
156
156
  document.getElementById("graphiql")
157
157
  );
@@ -3,9 +3,10 @@
3
3
  <head>
4
4
  <title>Graphinate</title>
5
5
  <style> body { margin: 0; } </style>
6
- <script src="https://cdn.jsdelivr.net/npm/3d-force-graph@1.73.2/dist/3d-force-graph.min.js"
7
- integrity="sha384-GvVjcMDlxnFkYfcqa18cpupB8NqHsk7/vla5sjyVcZ7Gjzc4fzSiQgCRB4zYFqCa"
6
+ <script src="https://cdn.jsdelivr.net/npm/3d-force-graph@1.72.3/dist/3d-force-graph.min.js"
7
+ integrity="sha256-X4nSjPQnyc5QqQ88WM5oVzMx2KUKXj3hxRAvt2WxDRI="
8
8
  crossorigin="anonymous"></script>
9
+
9
10
  <script src="/static/scripts/murmurhash3_gc.js"
10
11
  integrity="sha384-qmbe8KG4+frUnGS6DOKYZgFKbBvbhNNOL/LZ4hSpKauxmgrTX3LALg5+oQJS4AOn"></script>
11
12
  </head>
@@ -1 +0,0 @@
1
- pipdeptree==2.13.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes