Spaces:
Runtime error
Runtime error
update pyvis
Browse files- .gitignore +2 -1
- .gitmodules +3 -0
- .pre-commit-config.yaml +6 -6
- Makefile +2 -2
- Pipfile +1 -1
- Pipfile.lock +30 -33
- py_code_analyzer/code_imports_analyzer.py +29 -8
- py_code_analyzer/imports_graph_visualizer.py +19 -3
- pyvis +1 -0
.gitignore
CHANGED
@@ -2,4 +2,5 @@
|
|
2 |
.coverage
|
3 |
*.txt
|
4 |
*.html
|
5 |
-
.env
|
|
|
|
2 |
.coverage
|
3 |
*.txt
|
4 |
*.html
|
5 |
+
.env
|
6 |
+
lib/
|
.gitmodules
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
[submodule "pyvis"]
|
2 |
+
path = pyvis
|
3 |
+
url = https://github.com/mrceresa/pyvis
|
.pre-commit-config.yaml
CHANGED
@@ -5,21 +5,21 @@ repos:
|
|
5 |
name: isort
|
6 |
stages: [commit]
|
7 |
language: system
|
8 |
-
entry: pipenv run isort
|
9 |
types: [python]
|
10 |
|
11 |
- id: black
|
12 |
name: black
|
13 |
stages: [commit]
|
14 |
language: system
|
15 |
-
entry: pipenv run black
|
16 |
types: [python]
|
17 |
|
18 |
- id: flake8
|
19 |
name: flake8
|
20 |
stages: [commit]
|
21 |
language: system
|
22 |
-
entry: pipenv run flake8
|
23 |
types: [python]
|
24 |
exclude: setup.py
|
25 |
|
@@ -27,7 +27,7 @@ repos:
|
|
27 |
name: mypy
|
28 |
stages: [commit]
|
29 |
language: system
|
30 |
-
entry: pipenv run mypy
|
31 |
types: [python]
|
32 |
pass_filenames: false
|
33 |
|
@@ -35,13 +35,13 @@ repos:
|
|
35 |
# name: pytest
|
36 |
# stages: [commit]
|
37 |
# language: system
|
38 |
-
# entry: pipenv run pytest
|
39 |
# types: [python]
|
40 |
|
41 |
# - id: pytest-cov
|
42 |
# name: pytest
|
43 |
# stages: [push]
|
44 |
# language: system
|
45 |
-
# entry: pipenv run pytest --cov
|
46 |
# types: [python]
|
47 |
# pass_filenames: false
|
|
|
5 |
name: isort
|
6 |
stages: [commit]
|
7 |
language: system
|
8 |
+
entry: pipenv run isort py_code_analyzer
|
9 |
types: [python]
|
10 |
|
11 |
- id: black
|
12 |
name: black
|
13 |
stages: [commit]
|
14 |
language: system
|
15 |
+
entry: pipenv run black py_code_analyzer
|
16 |
types: [python]
|
17 |
|
18 |
- id: flake8
|
19 |
name: flake8
|
20 |
stages: [commit]
|
21 |
language: system
|
22 |
+
entry: pipenv run flake8 py_code_analyzer
|
23 |
types: [python]
|
24 |
exclude: setup.py
|
25 |
|
|
|
27 |
name: mypy
|
28 |
stages: [commit]
|
29 |
language: system
|
30 |
+
entry: pipenv run mypy py_code_analyzer
|
31 |
types: [python]
|
32 |
pass_filenames: false
|
33 |
|
|
|
35 |
# name: pytest
|
36 |
# stages: [commit]
|
37 |
# language: system
|
38 |
+
# entry: pipenv run pytest py_code_analyzer
|
39 |
# types: [python]
|
40 |
|
41 |
# - id: pytest-cov
|
42 |
# name: pytest
|
43 |
# stages: [push]
|
44 |
# language: system
|
45 |
+
# entry: pipenv run pytest --cov py_code_analyzer
|
46 |
# types: [python]
|
47 |
# pass_filenames: false
|
Makefile
CHANGED
@@ -4,8 +4,8 @@ run:
|
|
4 |
format:
|
5 |
pipenv run black py_code_analyzer && \
|
6 |
pipenv run isort py_code_analyzer && \
|
7 |
-
pipenv run flake8 && \
|
8 |
-
pipenv run mypy
|
9 |
|
10 |
test:
|
11 |
pipenv run pytest --cov
|
|
|
4 |
format:
|
5 |
pipenv run black py_code_analyzer && \
|
6 |
pipenv run isort py_code_analyzer && \
|
7 |
+
pipenv run flake8 py_code_analyzer && \
|
8 |
+
pipenv run mypy py_code_analyzer
|
9 |
|
10 |
test:
|
11 |
pipenv run pytest --cov
|
Pipfile
CHANGED
@@ -7,8 +7,8 @@ name = "pypi"
|
|
7 |
streamlit = "*"
|
8 |
requests = "*"
|
9 |
networkx = "*"
|
10 |
-
pyvis = "*"
|
11 |
orjson = "*"
|
|
|
12 |
|
13 |
[dev-packages]
|
14 |
black = "*"
|
|
|
7 |
streamlit = "*"
|
8 |
requests = "*"
|
9 |
networkx = "*"
|
|
|
10 |
orjson = "*"
|
11 |
+
pyvis = {editable = true, path = "./pyvis"}
|
12 |
|
13 |
[dev-packages]
|
14 |
black = "*"
|
Pipfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
"_meta": {
|
3 |
"hash": {
|
4 |
-
"sha256": "
|
5 |
},
|
6 |
"pipfile-spec": 6,
|
7 |
"requires": {
|
@@ -21,7 +21,7 @@
|
|
21 |
"sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a",
|
22 |
"sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"
|
23 |
],
|
24 |
-
"markers": "
|
25 |
"version": "==4.2.0"
|
26 |
},
|
27 |
"appnope": {
|
@@ -124,7 +124,7 @@
|
|
124 |
"sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1",
|
125 |
"sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"
|
126 |
],
|
127 |
-
"markers": "
|
128 |
"version": "==5.0.0"
|
129 |
},
|
130 |
"blinker": {
|
@@ -217,7 +217,7 @@
|
|
217 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
218 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
219 |
],
|
220 |
-
"markers": "
|
221 |
"version": "==8.1.3"
|
222 |
},
|
223 |
"commonmark": {
|
@@ -248,7 +248,7 @@
|
|
248 |
"sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f",
|
249 |
"sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"
|
250 |
],
|
251 |
-
"markers": "
|
252 |
"version": "==1.6.0"
|
253 |
},
|
254 |
"decorator": {
|
@@ -302,7 +302,7 @@
|
|
302 |
"sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
|
303 |
"sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
|
304 |
],
|
305 |
-
"markers": "
|
306 |
"version": "==3.1.27"
|
307 |
},
|
308 |
"idna": {
|
@@ -318,7 +318,7 @@
|
|
318 |
"sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700",
|
319 |
"sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"
|
320 |
],
|
321 |
-
"markers": "
|
322 |
"version": "==4.11.4"
|
323 |
},
|
324 |
"importlib-resources": {
|
@@ -372,7 +372,7 @@
|
|
372 |
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
|
373 |
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
|
374 |
],
|
375 |
-
"markers": "
|
376 |
"version": "==3.1.2"
|
377 |
},
|
378 |
"jsonpickle": {
|
@@ -388,7 +388,7 @@
|
|
388 |
"sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf",
|
389 |
"sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"
|
390 |
],
|
391 |
-
"markers": "
|
392 |
"version": "==4.6.0"
|
393 |
},
|
394 |
"jupyter-client": {
|
@@ -396,7 +396,7 @@
|
|
396 |
"sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b",
|
397 |
"sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef"
|
398 |
],
|
399 |
-
"markers": "
|
400 |
"version": "==7.3.1"
|
401 |
},
|
402 |
"jupyter-core": {
|
@@ -404,7 +404,7 @@
|
|
404 |
"sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec",
|
405 |
"sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"
|
406 |
],
|
407 |
-
"markers": "
|
408 |
"version": "==4.10.0"
|
409 |
},
|
410 |
"jupyterlab-pygments": {
|
@@ -412,7 +412,7 @@
|
|
412 |
"sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
|
413 |
"sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
|
414 |
],
|
415 |
-
"markers": "
|
416 |
"version": "==0.2.2"
|
417 |
},
|
418 |
"jupyterlab-widgets": {
|
@@ -466,7 +466,7 @@
|
|
466 |
"sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
|
467 |
"sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
|
468 |
],
|
469 |
-
"markers": "
|
470 |
"version": "==2.1.1"
|
471 |
},
|
472 |
"matplotlib-inline": {
|
@@ -489,7 +489,7 @@
|
|
489 |
"sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e",
|
490 |
"sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"
|
491 |
],
|
492 |
-
"markers": "
|
493 |
"version": "==0.6.4"
|
494 |
},
|
495 |
"nbconvert": {
|
@@ -497,7 +497,7 @@
|
|
497 |
"sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d",
|
498 |
"sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"
|
499 |
],
|
500 |
-
"markers": "
|
501 |
"version": "==6.5.0"
|
502 |
},
|
503 |
"nbformat": {
|
@@ -505,7 +505,7 @@
|
|
505 |
"sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad",
|
506 |
"sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"
|
507 |
],
|
508 |
-
"markers": "
|
509 |
"version": "==5.4.0"
|
510 |
},
|
511 |
"nest-asyncio": {
|
@@ -518,18 +518,18 @@
|
|
518 |
},
|
519 |
"networkx": {
|
520 |
"hashes": [
|
521 |
-
"sha256:
|
522 |
-
"sha256:
|
523 |
],
|
524 |
"index": "pypi",
|
525 |
-
"version": "==2.8.
|
526 |
},
|
527 |
"notebook": {
|
528 |
"hashes": [
|
529 |
"sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a",
|
530 |
"sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"
|
531 |
],
|
532 |
-
"markers": "
|
533 |
"version": "==6.4.11"
|
534 |
},
|
535 |
"numpy": {
|
@@ -705,7 +705,7 @@
|
|
705 |
"sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a",
|
706 |
"sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"
|
707 |
],
|
708 |
-
"markers": "
|
709 |
"version": "==9.1.1"
|
710 |
},
|
711 |
"prometheus-client": {
|
@@ -751,7 +751,7 @@
|
|
751 |
"sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20",
|
752 |
"sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"
|
753 |
],
|
754 |
-
"markers": "
|
755 |
"version": "==3.20.1"
|
756 |
},
|
757 |
"psutil": {
|
@@ -840,7 +840,7 @@
|
|
840 |
"sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab",
|
841 |
"sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"
|
842 |
],
|
843 |
-
"markers": "
|
844 |
"version": "==8.0.0"
|
845 |
},
|
846 |
"pycparser": {
|
@@ -855,7 +855,7 @@
|
|
855 |
"sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503",
|
856 |
"sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"
|
857 |
],
|
858 |
-
"markers": "
|
859 |
"version": "==0.7.1"
|
860 |
},
|
861 |
"pygments": {
|
@@ -906,7 +906,7 @@
|
|
906 |
"sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
|
907 |
"sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
|
908 |
],
|
909 |
-
"markers": "
|
910 |
"version": "==0.18.1"
|
911 |
},
|
912 |
"python-dateutil": {
|
@@ -933,11 +933,8 @@
|
|
933 |
"version": "==0.1.0.post0"
|
934 |
},
|
935 |
"pyvis": {
|
936 |
-
"
|
937 |
-
|
938 |
-
],
|
939 |
-
"index": "pypi",
|
940 |
-
"version": "==0.2.1"
|
941 |
},
|
942 |
"pyzmq": {
|
943 |
"hashes": [
|
@@ -1077,7 +1074,7 @@
|
|
1077 |
"sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197",
|
1078 |
"sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"
|
1079 |
],
|
1080 |
-
"markers": "
|
1081 |
"version": "==0.15.0"
|
1082 |
},
|
1083 |
"tinycss2": {
|
@@ -1156,7 +1153,7 @@
|
|
1156 |
"sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b",
|
1157 |
"sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"
|
1158 |
],
|
1159 |
-
"markers": "
|
1160 |
"version": "==5.2.2.post1"
|
1161 |
},
|
1162 |
"typing-extensions": {
|
@@ -1271,7 +1268,7 @@
|
|
1271 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
1272 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
1273 |
],
|
1274 |
-
"markers": "
|
1275 |
"version": "==8.1.3"
|
1276 |
},
|
1277 |
"coverage": {
|
|
|
1 |
{
|
2 |
"_meta": {
|
3 |
"hash": {
|
4 |
+
"sha256": "b3ad133b7dbeaf9a10743bb8a6ee428061387fbe5770d1779ad72fe9acf3b79b"
|
5 |
},
|
6 |
"pipfile-spec": 6,
|
7 |
"requires": {
|
|
|
21 |
"sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a",
|
22 |
"sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"
|
23 |
],
|
24 |
+
"markers": "python_full_version >= '3.7.0'",
|
25 |
"version": "==4.2.0"
|
26 |
},
|
27 |
"appnope": {
|
|
|
124 |
"sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1",
|
125 |
"sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"
|
126 |
],
|
127 |
+
"markers": "python_full_version >= '3.7.0'",
|
128 |
"version": "==5.0.0"
|
129 |
},
|
130 |
"blinker": {
|
|
|
217 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
218 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
219 |
],
|
220 |
+
"markers": "python_full_version >= '3.7.0'",
|
221 |
"version": "==8.1.3"
|
222 |
},
|
223 |
"commonmark": {
|
|
|
248 |
"sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f",
|
249 |
"sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"
|
250 |
],
|
251 |
+
"markers": "python_full_version >= '3.7.0'",
|
252 |
"version": "==1.6.0"
|
253 |
},
|
254 |
"decorator": {
|
|
|
302 |
"sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
|
303 |
"sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
|
304 |
],
|
305 |
+
"markers": "python_full_version >= '3.7.0'",
|
306 |
"version": "==3.1.27"
|
307 |
},
|
308 |
"idna": {
|
|
|
318 |
"sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700",
|
319 |
"sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"
|
320 |
],
|
321 |
+
"markers": "python_full_version >= '3.7.0'",
|
322 |
"version": "==4.11.4"
|
323 |
},
|
324 |
"importlib-resources": {
|
|
|
372 |
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
|
373 |
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
|
374 |
],
|
375 |
+
"markers": "python_full_version >= '3.7.0'",
|
376 |
"version": "==3.1.2"
|
377 |
},
|
378 |
"jsonpickle": {
|
|
|
388 |
"sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf",
|
389 |
"sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"
|
390 |
],
|
391 |
+
"markers": "python_full_version >= '3.7.0'",
|
392 |
"version": "==4.6.0"
|
393 |
},
|
394 |
"jupyter-client": {
|
|
|
396 |
"sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b",
|
397 |
"sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef"
|
398 |
],
|
399 |
+
"markers": "python_full_version >= '3.7.0'",
|
400 |
"version": "==7.3.1"
|
401 |
},
|
402 |
"jupyter-core": {
|
|
|
404 |
"sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec",
|
405 |
"sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"
|
406 |
],
|
407 |
+
"markers": "python_full_version >= '3.7.0'",
|
408 |
"version": "==4.10.0"
|
409 |
},
|
410 |
"jupyterlab-pygments": {
|
|
|
412 |
"sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
|
413 |
"sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
|
414 |
],
|
415 |
+
"markers": "python_full_version >= '3.7.0'",
|
416 |
"version": "==0.2.2"
|
417 |
},
|
418 |
"jupyterlab-widgets": {
|
|
|
466 |
"sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
|
467 |
"sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
|
468 |
],
|
469 |
+
"markers": "python_full_version >= '3.7.0'",
|
470 |
"version": "==2.1.1"
|
471 |
},
|
472 |
"matplotlib-inline": {
|
|
|
489 |
"sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e",
|
490 |
"sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"
|
491 |
],
|
492 |
+
"markers": "python_full_version >= '3.7.0'",
|
493 |
"version": "==0.6.4"
|
494 |
},
|
495 |
"nbconvert": {
|
|
|
497 |
"sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d",
|
498 |
"sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"
|
499 |
],
|
500 |
+
"markers": "python_full_version >= '3.7.0'",
|
501 |
"version": "==6.5.0"
|
502 |
},
|
503 |
"nbformat": {
|
|
|
505 |
"sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad",
|
506 |
"sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"
|
507 |
],
|
508 |
+
"markers": "python_full_version >= '3.7.0'",
|
509 |
"version": "==5.4.0"
|
510 |
},
|
511 |
"nest-asyncio": {
|
|
|
518 |
},
|
519 |
"networkx": {
|
520 |
"hashes": [
|
521 |
+
"sha256:67fab04a955a73eb660fe7bf281b6fa71a003bc6e23a92d2f6227654c5223dbe",
|
522 |
+
"sha256:f151edac6f9b0cf11fecce93e236ac22b499bb9ff8d6f8393b9fef5ad09506cc"
|
523 |
],
|
524 |
"index": "pypi",
|
525 |
+
"version": "==2.8.3"
|
526 |
},
|
527 |
"notebook": {
|
528 |
"hashes": [
|
529 |
"sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a",
|
530 |
"sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"
|
531 |
],
|
532 |
+
"markers": "python_full_version >= '3.7.0'",
|
533 |
"version": "==6.4.11"
|
534 |
},
|
535 |
"numpy": {
|
|
|
705 |
"sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a",
|
706 |
"sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"
|
707 |
],
|
708 |
+
"markers": "python_full_version >= '3.7.0'",
|
709 |
"version": "==9.1.1"
|
710 |
},
|
711 |
"prometheus-client": {
|
|
|
751 |
"sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20",
|
752 |
"sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"
|
753 |
],
|
754 |
+
"markers": "python_full_version >= '3.7.0'",
|
755 |
"version": "==3.20.1"
|
756 |
},
|
757 |
"psutil": {
|
|
|
840 |
"sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab",
|
841 |
"sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"
|
842 |
],
|
843 |
+
"markers": "python_full_version >= '3.7.0'",
|
844 |
"version": "==8.0.0"
|
845 |
},
|
846 |
"pycparser": {
|
|
|
855 |
"sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503",
|
856 |
"sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"
|
857 |
],
|
858 |
+
"markers": "python_full_version >= '3.7.0'",
|
859 |
"version": "==0.7.1"
|
860 |
},
|
861 |
"pygments": {
|
|
|
906 |
"sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
|
907 |
"sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
|
908 |
],
|
909 |
+
"markers": "python_full_version >= '3.7.0'",
|
910 |
"version": "==0.18.1"
|
911 |
},
|
912 |
"python-dateutil": {
|
|
|
933 |
"version": "==0.1.0.post0"
|
934 |
},
|
935 |
"pyvis": {
|
936 |
+
"editable": true,
|
937 |
+
"path": "./pyvis"
|
|
|
|
|
|
|
938 |
},
|
939 |
"pyzmq": {
|
940 |
"hashes": [
|
|
|
1074 |
"sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197",
|
1075 |
"sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"
|
1076 |
],
|
1077 |
+
"markers": "python_full_version >= '3.7.0'",
|
1078 |
"version": "==0.15.0"
|
1079 |
},
|
1080 |
"tinycss2": {
|
|
|
1153 |
"sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b",
|
1154 |
"sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"
|
1155 |
],
|
1156 |
+
"markers": "python_full_version >= '3.7.0'",
|
1157 |
"version": "==5.2.2.post1"
|
1158 |
},
|
1159 |
"typing-extensions": {
|
|
|
1268 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
1269 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
1270 |
],
|
1271 |
+
"markers": "python_full_version >= '3.7.0'",
|
1272 |
"version": "==8.1.3"
|
1273 |
},
|
1274 |
"coverage": {
|
py_code_analyzer/code_imports_analyzer.py
CHANGED
@@ -28,16 +28,16 @@ class CodeImportsAnalyzer:
|
|
28 |
self.generic_visit(node)
|
29 |
|
30 |
def __init__(self, python_files):
|
31 |
-
self.
|
32 |
self.imports_graph = nx.DiGraph() # imports_graph is a directed graph
|
33 |
self.python_files = python_files
|
34 |
-
self._node_visitor = CodeImportsAnalyzer._NodeVisitor(self.
|
35 |
|
36 |
def analyze(self):
|
37 |
for python_file in self.python_files:
|
38 |
program = requests.get(python_file["download_url"]).text
|
39 |
tree = ast.parse(program)
|
40 |
-
self.
|
41 |
{
|
42 |
"file_name": python_file["name"],
|
43 |
"file_path": python_file["path"],
|
@@ -47,17 +47,38 @@ class CodeImportsAnalyzer:
|
|
47 |
self._node_visitor.visit(tree)
|
48 |
return self
|
49 |
|
|
|
|
|
|
|
|
|
50 |
def generate_imports_graph(self):
|
51 |
-
for
|
52 |
-
_nodes =
|
53 |
if len(_nodes):
|
|
|
|
|
54 |
if len(_nodes) > 1:
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
57 |
else:
|
58 |
self.imports_graph.add_node(_nodes[0])
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
return self.imports_graph
|
61 |
|
62 |
def report(self):
|
63 |
-
pprint(self.
|
|
|
28 |
self.generic_visit(node)
|
29 |
|
30 |
def __init__(self, python_files):
|
31 |
+
self.python_imports = []
|
32 |
self.imports_graph = nx.DiGraph() # imports_graph is a directed graph
|
33 |
self.python_files = python_files
|
34 |
+
self._node_visitor = CodeImportsAnalyzer._NodeVisitor(self.python_imports)
|
35 |
|
36 |
def analyze(self):
|
37 |
for python_file in self.python_files:
|
38 |
program = requests.get(python_file["download_url"]).text
|
39 |
tree = ast.parse(program)
|
40 |
+
self.python_imports += [
|
41 |
{
|
42 |
"file_name": python_file["name"],
|
43 |
"file_path": python_file["path"],
|
|
|
47 |
self._node_visitor.visit(tree)
|
48 |
return self
|
49 |
|
50 |
+
def _add_edges(self, nodes):
|
51 |
+
for first_node, second_node in zip(nodes, nodes[1:]):
|
52 |
+
self.imports_graph.add_edge(first_node, second_node)
|
53 |
+
|
54 |
def generate_imports_graph(self):
|
55 |
+
for python_import in self.python_imports:
|
56 |
+
_nodes = python_import["file_path"].split("/")
|
57 |
if len(_nodes):
|
58 |
+
# generate graph based on file_path
|
59 |
+
# node/edge relationship means file/folder structure
|
60 |
if len(_nodes) > 1:
|
61 |
+
# make last node and second last node as one node
|
62 |
+
# to solve the issue of duplicated file names using only last node
|
63 |
+
if len(_nodes) >= 3:
|
64 |
+
_nodes[-2] = _nodes[-2] + "/" + _nodes[-1]
|
65 |
+
del _nodes[-1]
|
66 |
+
self._add_edges(_nodes)
|
67 |
else:
|
68 |
self.imports_graph.add_node(_nodes[0])
|
69 |
|
70 |
+
# generate graph based on imported modules in each file
|
71 |
+
for _import in python_import["imports"]:
|
72 |
+
if _import["module"] is None:
|
73 |
+
_import_names = _import["name"].split(".")
|
74 |
+
_new_nodes = _import_names + [_nodes[-1]]
|
75 |
+
self._add_edges(_new_nodes)
|
76 |
+
else:
|
77 |
+
_import_names = _import["module"].split(".") + [_import["name"]]
|
78 |
+
_new_nodes = _import_names + [_nodes[-1]]
|
79 |
+
self._add_edges(_new_nodes)
|
80 |
+
|
81 |
return self.imports_graph
|
82 |
|
83 |
def report(self):
|
84 |
+
pprint(self.python_imports)
|
py_code_analyzer/imports_graph_visualizer.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
import networkx as nx
|
2 |
-
|
|
|
3 |
|
4 |
|
5 |
class ImportsGraphVisualizer:
|
@@ -8,10 +9,25 @@ class ImportsGraphVisualizer:
|
|
8 |
cls,
|
9 |
imports_graph: nx.Graph,
|
10 |
directed: bool = True,
|
|
|
|
|
|
|
11 |
width: int = 100,
|
12 |
-
height: int =
|
|
|
13 |
display_html_name: str = "nx.html",
|
14 |
):
|
15 |
-
_pyvis_network = Network(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
_pyvis_network.from_nx(imports_graph)
|
|
|
|
|
17 |
_pyvis_network.show(display_html_name)
|
|
|
1 |
import networkx as nx
|
2 |
+
|
3 |
+
from pyvis import Network
|
4 |
|
5 |
|
6 |
class ImportsGraphVisualizer:
|
|
|
9 |
cls,
|
10 |
imports_graph: nx.Graph,
|
11 |
directed: bool = True,
|
12 |
+
layout: bool = True, # Use hierarchical if True
|
13 |
+
neighborhood_highlight: bool = True,
|
14 |
+
select_menu: bool = True,
|
15 |
width: int = 100,
|
16 |
+
height: int = 800,
|
17 |
+
show_buttons: bool = False,
|
18 |
display_html_name: str = "nx.html",
|
19 |
):
|
20 |
+
_pyvis_network = Network(
|
21 |
+
width=f"{width}%",
|
22 |
+
height=f"{height}px",
|
23 |
+
directed=directed,
|
24 |
+
layout=layout,
|
25 |
+
neighborhood_highlight=neighborhood_highlight,
|
26 |
+
select_menu=select_menu,
|
27 |
+
)
|
28 |
+
_pyvis_network.toggle_hide_edges_on_drag(True)
|
29 |
+
|
30 |
_pyvis_network.from_nx(imports_graph)
|
31 |
+
if show_buttons:
|
32 |
+
_pyvis_network.show_buttons()
|
33 |
_pyvis_network.show(display_html_name)
|
pyvis
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
Subproject commit 1e03c6f09b3756ac398fb05541f4cee1337ed5a8
|