Spaces:
Runtime error
Runtime error
refactor and update
Browse files- Pipfile +0 -1
- Pipfile.lock +43 -27
- app.py +26 -20
- py_code_analyzer/code_fetcher.py +15 -12
- py_code_analyzer/imports_graph_visualizer.py +2 -0
- pyvis/pyvis/templates/template.html +1 -0
Pipfile
CHANGED
|
@@ -7,7 +7,6 @@ name = "pypi"
|
|
| 7 |
streamlit = "*"
|
| 8 |
requests = "*"
|
| 9 |
networkx = "*"
|
| 10 |
-
orjson = "*"
|
| 11 |
pyvis = {editable = true, path = "./pyvis"}
|
| 12 |
|
| 13 |
[dev-packages]
|
|
|
|
| 7 |
streamlit = "*"
|
| 8 |
requests = "*"
|
| 9 |
networkx = "*"
|
|
|
|
| 10 |
pyvis = {editable = true, path = "./pyvis"}
|
| 11 |
|
| 12 |
[dev-packages]
|
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": {
|
|
@@ -133,6 +133,14 @@
|
|
| 133 |
],
|
| 134 |
"version": "==1.4"
|
| 135 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
"cachetools": {
|
| 137 |
"hashes": [
|
| 138 |
"sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757",
|
|
@@ -217,7 +225,7 @@
|
|
| 217 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
| 218 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
| 219 |
],
|
| 220 |
-
"markers": "
|
| 221 |
"version": "==8.1.3"
|
| 222 |
},
|
| 223 |
"commonmark": {
|
|
@@ -248,7 +256,7 @@
|
|
| 248 |
"sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f",
|
| 249 |
"sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"
|
| 250 |
],
|
| 251 |
-
"markers": "
|
| 252 |
"version": "==1.6.0"
|
| 253 |
},
|
| 254 |
"decorator": {
|
|
@@ -289,6 +297,14 @@
|
|
| 289 |
],
|
| 290 |
"version": "==2.15.3"
|
| 291 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 292 |
"gitdb": {
|
| 293 |
"hashes": [
|
| 294 |
"sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd",
|
|
@@ -302,7 +318,7 @@
|
|
| 302 |
"sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
|
| 303 |
"sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
|
| 304 |
],
|
| 305 |
-
"markers": "
|
| 306 |
"version": "==3.1.27"
|
| 307 |
},
|
| 308 |
"idna": {
|
|
@@ -318,7 +334,7 @@
|
|
| 318 |
"sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700",
|
| 319 |
"sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"
|
| 320 |
],
|
| 321 |
-
"markers": "
|
| 322 |
"version": "==4.11.4"
|
| 323 |
},
|
| 324 |
"importlib-resources": {
|
|
@@ -372,7 +388,7 @@
|
|
| 372 |
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
|
| 373 |
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
|
| 374 |
],
|
| 375 |
-
"markers": "
|
| 376 |
"version": "==3.1.2"
|
| 377 |
},
|
| 378 |
"jsonpickle": {
|
|
@@ -388,7 +404,7 @@
|
|
| 388 |
"sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf",
|
| 389 |
"sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"
|
| 390 |
],
|
| 391 |
-
"markers": "
|
| 392 |
"version": "==4.6.0"
|
| 393 |
},
|
| 394 |
"jupyter-client": {
|
|
@@ -396,7 +412,7 @@
|
|
| 396 |
"sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b",
|
| 397 |
"sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef"
|
| 398 |
],
|
| 399 |
-
"markers": "
|
| 400 |
"version": "==7.3.1"
|
| 401 |
},
|
| 402 |
"jupyter-core": {
|
|
@@ -404,7 +420,7 @@
|
|
| 404 |
"sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec",
|
| 405 |
"sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"
|
| 406 |
],
|
| 407 |
-
"markers": "
|
| 408 |
"version": "==4.10.0"
|
| 409 |
},
|
| 410 |
"jupyterlab-pygments": {
|
|
@@ -412,7 +428,7 @@
|
|
| 412 |
"sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
|
| 413 |
"sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
|
| 414 |
],
|
| 415 |
-
"markers": "
|
| 416 |
"version": "==0.2.2"
|
| 417 |
},
|
| 418 |
"jupyterlab-widgets": {
|
|
@@ -466,7 +482,7 @@
|
|
| 466 |
"sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
|
| 467 |
"sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
|
| 468 |
],
|
| 469 |
-
"markers": "
|
| 470 |
"version": "==2.1.1"
|
| 471 |
},
|
| 472 |
"matplotlib-inline": {
|
|
@@ -489,7 +505,7 @@
|
|
| 489 |
"sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e",
|
| 490 |
"sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"
|
| 491 |
],
|
| 492 |
-
"markers": "
|
| 493 |
"version": "==0.6.4"
|
| 494 |
},
|
| 495 |
"nbconvert": {
|
|
@@ -497,7 +513,7 @@
|
|
| 497 |
"sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d",
|
| 498 |
"sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"
|
| 499 |
],
|
| 500 |
-
"markers": "
|
| 501 |
"version": "==6.5.0"
|
| 502 |
},
|
| 503 |
"nbformat": {
|
|
@@ -505,7 +521,7 @@
|
|
| 505 |
"sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad",
|
| 506 |
"sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"
|
| 507 |
],
|
| 508 |
-
"markers": "
|
| 509 |
"version": "==5.4.0"
|
| 510 |
},
|
| 511 |
"nest-asyncio": {
|
|
@@ -529,7 +545,7 @@
|
|
| 529 |
"sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a",
|
| 530 |
"sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"
|
| 531 |
],
|
| 532 |
-
"markers": "
|
| 533 |
"version": "==6.4.11"
|
| 534 |
},
|
| 535 |
"numpy": {
|
|
@@ -705,7 +721,7 @@
|
|
| 705 |
"sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a",
|
| 706 |
"sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"
|
| 707 |
],
|
| 708 |
-
"markers": "
|
| 709 |
"version": "==9.1.1"
|
| 710 |
},
|
| 711 |
"prometheus-client": {
|
|
@@ -751,7 +767,7 @@
|
|
| 751 |
"sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20",
|
| 752 |
"sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"
|
| 753 |
],
|
| 754 |
-
"markers": "
|
| 755 |
"version": "==3.20.1"
|
| 756 |
},
|
| 757 |
"psutil": {
|
|
@@ -840,7 +856,7 @@
|
|
| 840 |
"sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab",
|
| 841 |
"sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"
|
| 842 |
],
|
| 843 |
-
"markers": "
|
| 844 |
"version": "==8.0.0"
|
| 845 |
},
|
| 846 |
"pycparser": {
|
|
@@ -855,7 +871,7 @@
|
|
| 855 |
"sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503",
|
| 856 |
"sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"
|
| 857 |
],
|
| 858 |
-
"markers": "
|
| 859 |
"version": "==0.7.1"
|
| 860 |
},
|
| 861 |
"pygments": {
|
|
@@ -906,7 +922,7 @@
|
|
| 906 |
"sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
|
| 907 |
"sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
|
| 908 |
],
|
| 909 |
-
"markers": "
|
| 910 |
"version": "==0.18.1"
|
| 911 |
},
|
| 912 |
"python-dateutil": {
|
|
@@ -1012,7 +1028,7 @@
|
|
| 1012 |
"sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2",
|
| 1013 |
"sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"
|
| 1014 |
],
|
| 1015 |
-
"markers": "
|
| 1016 |
"version": "==12.4.4"
|
| 1017 |
},
|
| 1018 |
"semver": {
|
|
@@ -1074,7 +1090,7 @@
|
|
| 1074 |
"sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197",
|
| 1075 |
"sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"
|
| 1076 |
],
|
| 1077 |
-
"markers": "
|
| 1078 |
"version": "==0.15.0"
|
| 1079 |
},
|
| 1080 |
"tinycss2": {
|
|
@@ -1153,7 +1169,7 @@
|
|
| 1153 |
"sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b",
|
| 1154 |
"sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"
|
| 1155 |
],
|
| 1156 |
-
"markers": "
|
| 1157 |
"version": "==5.2.2.post1"
|
| 1158 |
},
|
| 1159 |
"typing-extensions": {
|
|
@@ -1185,7 +1201,7 @@
|
|
| 1185 |
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
|
| 1186 |
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
|
| 1187 |
],
|
| 1188 |
-
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and
|
| 1189 |
"version": "==1.26.9"
|
| 1190 |
},
|
| 1191 |
"validators": {
|
|
@@ -1268,7 +1284,7 @@
|
|
| 1268 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
| 1269 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
| 1270 |
],
|
| 1271 |
-
"markers": "
|
| 1272 |
"version": "==8.1.3"
|
| 1273 |
},
|
| 1274 |
"coverage": {
|
|
|
|
| 1 |
{
|
| 2 |
"_meta": {
|
| 3 |
"hash": {
|
| 4 |
+
"sha256": "dd62beb31967a9cc4e0ebbf1f5ac1078db8868bb4cad3527adc3f9480d298529"
|
| 5 |
},
|
| 6 |
"pipfile-spec": 6,
|
| 7 |
"requires": {
|
|
|
|
| 21 |
"sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a",
|
| 22 |
"sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"
|
| 23 |
],
|
| 24 |
+
"markers": "python_version >= '3.7'",
|
| 25 |
"version": "==4.2.0"
|
| 26 |
},
|
| 27 |
"appnope": {
|
|
|
|
| 124 |
"sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1",
|
| 125 |
"sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"
|
| 126 |
],
|
| 127 |
+
"markers": "python_version >= '3.7'",
|
| 128 |
"version": "==5.0.0"
|
| 129 |
},
|
| 130 |
"blinker": {
|
|
|
|
| 133 |
],
|
| 134 |
"version": "==1.4"
|
| 135 |
},
|
| 136 |
+
"branca": {
|
| 137 |
+
"hashes": [
|
| 138 |
+
"sha256:781ff32bf82979584b0004bd84c254cfccda26bc31b2f7333346d03fb7b97741",
|
| 139 |
+
"sha256:e6f2f7eba7dd368ceef8f63822b867f5e11d4d3abdd099a787db9ed2b7065ae1"
|
| 140 |
+
],
|
| 141 |
+
"markers": "python_version >= '3.5'",
|
| 142 |
+
"version": "==0.5.0"
|
| 143 |
+
},
|
| 144 |
"cachetools": {
|
| 145 |
"hashes": [
|
| 146 |
"sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757",
|
|
|
|
| 225 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
| 226 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
| 227 |
],
|
| 228 |
+
"markers": "python_version >= '3.7'",
|
| 229 |
"version": "==8.1.3"
|
| 230 |
},
|
| 231 |
"commonmark": {
|
|
|
|
| 256 |
"sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f",
|
| 257 |
"sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"
|
| 258 |
],
|
| 259 |
+
"markers": "python_version >= '3.7'",
|
| 260 |
"version": "==1.6.0"
|
| 261 |
},
|
| 262 |
"decorator": {
|
|
|
|
| 297 |
],
|
| 298 |
"version": "==2.15.3"
|
| 299 |
},
|
| 300 |
+
"folium": {
|
| 301 |
+
"hashes": [
|
| 302 |
+
"sha256:e856ae1de0b322a719b01ceed64ea16f6f011bd28ed22e954a7f7884313da672",
|
| 303 |
+
"sha256:e91e57d8298f3ccf4cce3c5e065bea6eb17033e3c5432b8a22214009c266b2ab"
|
| 304 |
+
],
|
| 305 |
+
"index": "pypi",
|
| 306 |
+
"version": "==0.12.1.post1"
|
| 307 |
+
},
|
| 308 |
"gitdb": {
|
| 309 |
"hashes": [
|
| 310 |
"sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd",
|
|
|
|
| 318 |
"sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
|
| 319 |
"sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
|
| 320 |
],
|
| 321 |
+
"markers": "python_version >= '3.7'",
|
| 322 |
"version": "==3.1.27"
|
| 323 |
},
|
| 324 |
"idna": {
|
|
|
|
| 334 |
"sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700",
|
| 335 |
"sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"
|
| 336 |
],
|
| 337 |
+
"markers": "python_version >= '3.7'",
|
| 338 |
"version": "==4.11.4"
|
| 339 |
},
|
| 340 |
"importlib-resources": {
|
|
|
|
| 388 |
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
|
| 389 |
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
|
| 390 |
],
|
| 391 |
+
"markers": "python_version >= '3.7'",
|
| 392 |
"version": "==3.1.2"
|
| 393 |
},
|
| 394 |
"jsonpickle": {
|
|
|
|
| 404 |
"sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf",
|
| 405 |
"sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"
|
| 406 |
],
|
| 407 |
+
"markers": "python_version >= '3.7'",
|
| 408 |
"version": "==4.6.0"
|
| 409 |
},
|
| 410 |
"jupyter-client": {
|
|
|
|
| 412 |
"sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b",
|
| 413 |
"sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef"
|
| 414 |
],
|
| 415 |
+
"markers": "python_version >= '3.7'",
|
| 416 |
"version": "==7.3.1"
|
| 417 |
},
|
| 418 |
"jupyter-core": {
|
|
|
|
| 420 |
"sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec",
|
| 421 |
"sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"
|
| 422 |
],
|
| 423 |
+
"markers": "python_version >= '3.7'",
|
| 424 |
"version": "==4.10.0"
|
| 425 |
},
|
| 426 |
"jupyterlab-pygments": {
|
|
|
|
| 428 |
"sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
|
| 429 |
"sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
|
| 430 |
],
|
| 431 |
+
"markers": "python_version >= '3.7'",
|
| 432 |
"version": "==0.2.2"
|
| 433 |
},
|
| 434 |
"jupyterlab-widgets": {
|
|
|
|
| 482 |
"sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
|
| 483 |
"sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
|
| 484 |
],
|
| 485 |
+
"markers": "python_version >= '3.7'",
|
| 486 |
"version": "==2.1.1"
|
| 487 |
},
|
| 488 |
"matplotlib-inline": {
|
|
|
|
| 505 |
"sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e",
|
| 506 |
"sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"
|
| 507 |
],
|
| 508 |
+
"markers": "python_version >= '3.7'",
|
| 509 |
"version": "==0.6.4"
|
| 510 |
},
|
| 511 |
"nbconvert": {
|
|
|
|
| 513 |
"sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d",
|
| 514 |
"sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"
|
| 515 |
],
|
| 516 |
+
"markers": "python_version >= '3.7'",
|
| 517 |
"version": "==6.5.0"
|
| 518 |
},
|
| 519 |
"nbformat": {
|
|
|
|
| 521 |
"sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad",
|
| 522 |
"sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"
|
| 523 |
],
|
| 524 |
+
"markers": "python_version >= '3.7'",
|
| 525 |
"version": "==5.4.0"
|
| 526 |
},
|
| 527 |
"nest-asyncio": {
|
|
|
|
| 545 |
"sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a",
|
| 546 |
"sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"
|
| 547 |
],
|
| 548 |
+
"markers": "python_version >= '3.7'",
|
| 549 |
"version": "==6.4.11"
|
| 550 |
},
|
| 551 |
"numpy": {
|
|
|
|
| 721 |
"sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a",
|
| 722 |
"sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"
|
| 723 |
],
|
| 724 |
+
"markers": "python_version >= '3.7'",
|
| 725 |
"version": "==9.1.1"
|
| 726 |
},
|
| 727 |
"prometheus-client": {
|
|
|
|
| 767 |
"sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20",
|
| 768 |
"sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"
|
| 769 |
],
|
| 770 |
+
"markers": "python_version >= '3.7'",
|
| 771 |
"version": "==3.20.1"
|
| 772 |
},
|
| 773 |
"psutil": {
|
|
|
|
| 856 |
"sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab",
|
| 857 |
"sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"
|
| 858 |
],
|
| 859 |
+
"markers": "python_version >= '3.7'",
|
| 860 |
"version": "==8.0.0"
|
| 861 |
},
|
| 862 |
"pycparser": {
|
|
|
|
| 871 |
"sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503",
|
| 872 |
"sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"
|
| 873 |
],
|
| 874 |
+
"markers": "python_version >= '3.7'",
|
| 875 |
"version": "==0.7.1"
|
| 876 |
},
|
| 877 |
"pygments": {
|
|
|
|
| 922 |
"sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
|
| 923 |
"sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
|
| 924 |
],
|
| 925 |
+
"markers": "python_version >= '3.7'",
|
| 926 |
"version": "==0.18.1"
|
| 927 |
},
|
| 928 |
"python-dateutil": {
|
|
|
|
| 1028 |
"sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2",
|
| 1029 |
"sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"
|
| 1030 |
],
|
| 1031 |
+
"markers": "python_version < '4' and python_full_version >= '3.6.3'",
|
| 1032 |
"version": "==12.4.4"
|
| 1033 |
},
|
| 1034 |
"semver": {
|
|
|
|
| 1090 |
"sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197",
|
| 1091 |
"sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"
|
| 1092 |
],
|
| 1093 |
+
"markers": "python_version >= '3.7'",
|
| 1094 |
"version": "==0.15.0"
|
| 1095 |
},
|
| 1096 |
"tinycss2": {
|
|
|
|
| 1169 |
"sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b",
|
| 1170 |
"sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"
|
| 1171 |
],
|
| 1172 |
+
"markers": "python_version >= '3.7'",
|
| 1173 |
"version": "==5.2.2.post1"
|
| 1174 |
},
|
| 1175 |
"typing-extensions": {
|
|
|
|
| 1201 |
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
|
| 1202 |
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
|
| 1203 |
],
|
| 1204 |
+
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
|
| 1205 |
"version": "==1.26.9"
|
| 1206 |
},
|
| 1207 |
"validators": {
|
|
|
|
| 1284 |
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
| 1285 |
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
| 1286 |
],
|
| 1287 |
+
"markers": "python_version >= '3.7'",
|
| 1288 |
"version": "==8.1.3"
|
| 1289 |
},
|
| 1290 |
"coverage": {
|
app.py
CHANGED
|
@@ -17,42 +17,48 @@ st.markdown(
|
|
| 17 |
owner = st.text_input("Enter GitHub username", value="cyyeh")
|
| 18 |
repo = st.text_input("Enter GitHib repo name", value="py-code-analyzer")
|
| 19 |
path = st.text_input(
|
| 20 |
-
"Enter target directory path
|
| 21 |
value="py_code_analyzer",
|
| 22 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
return CodeFetcher().get_python_files(owner, repo, path)
|
| 28 |
|
| 29 |
|
| 30 |
-
@st.cache(allow_output_mutation=True)
|
| 31 |
def generate_imports_graph(python_files):
|
| 32 |
return CodeImportsAnalyzer(python_files).analyze().generate_imports_graph()
|
| 33 |
|
| 34 |
|
| 35 |
-
@st.cache
|
| 36 |
def generate_graph_visualization_file(imports_graph):
|
| 37 |
ImportsGraphVisualizer().visualize(imports_graph)
|
| 38 |
|
| 39 |
|
| 40 |
-
@st.cache
|
| 41 |
def read_graph_visualization_file():
|
| 42 |
return open("nx.html", "r", encoding="utf-8").read()
|
| 43 |
|
| 44 |
|
| 45 |
-
if owner and repo:
|
| 46 |
-
with st.spinner("
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
|
| 52 |
-
st.
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
owner = st.text_input("Enter GitHub username", value="cyyeh")
|
| 18 |
repo = st.text_input("Enter GitHib repo name", value="py-code-analyzer")
|
| 19 |
path = st.text_input(
|
| 20 |
+
"Enter target directory path. Default: the target directory will be the root directory",
|
| 21 |
value="py_code_analyzer",
|
| 22 |
)
|
| 23 |
+
ref = st.text_input(
|
| 24 |
+
"Enter the name of the commit/branch/tag. Default: the repository's default branch",
|
| 25 |
+
)
|
| 26 |
+
clicked_ok_button = st.button("OK")
|
| 27 |
+
st.markdown("---")
|
| 28 |
|
| 29 |
|
| 30 |
+
def get_python_files(owner, repo, path, ref=""):
|
| 31 |
+
return CodeFetcher().get_python_files(owner, repo, path, ref=ref)
|
|
|
|
| 32 |
|
| 33 |
|
|
|
|
| 34 |
def generate_imports_graph(python_files):
|
| 35 |
return CodeImportsAnalyzer(python_files).analyze().generate_imports_graph()
|
| 36 |
|
| 37 |
|
|
|
|
| 38 |
def generate_graph_visualization_file(imports_graph):
|
| 39 |
ImportsGraphVisualizer().visualize(imports_graph)
|
| 40 |
|
| 41 |
|
|
|
|
| 42 |
def read_graph_visualization_file():
|
| 43 |
return open("nx.html", "r", encoding="utf-8").read()
|
| 44 |
|
| 45 |
|
| 46 |
+
if clicked_ok_button and owner and repo:
|
| 47 |
+
with st.spinner("Getting python files..."):
|
| 48 |
+
python_files = get_python_files(owner, repo, path, ref=ref)
|
| 49 |
+
|
| 50 |
+
with st.spinner("Generating imports graph..."):
|
| 51 |
+
imports_graph = generate_imports_graph(python_files)
|
| 52 |
|
| 53 |
+
with st.spinner("Generating graph visualization file..."):
|
| 54 |
+
generate_graph_visualization_file(imports_graph)
|
| 55 |
+
|
| 56 |
+
with st.spinner("Showing the graph..."):
|
| 57 |
+
graph_visualization_file = read_graph_visualization_file()
|
| 58 |
+
st.download_button(
|
| 59 |
+
"Download the result file",
|
| 60 |
+
graph_visualization_file,
|
| 61 |
+
file_name="result.html",
|
| 62 |
+
mime="text/html",
|
| 63 |
+
)
|
| 64 |
+
components.html(graph_visualization_file, height=600, scrolling=True)
|
py_code_analyzer/code_fetcher.py
CHANGED
|
@@ -7,7 +7,7 @@ import requests
|
|
| 7 |
|
| 8 |
# to increase api rate limiting
|
| 9 |
# https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting
|
| 10 |
-
USER = os.environ.get("
|
| 11 |
PERSONAL_ACCESS_TOKEN = os.environ.get("PERSONAL_ACCESS_TOKEN", "")
|
| 12 |
|
| 13 |
|
|
@@ -32,18 +32,21 @@ class CodeFetcher:
|
|
| 32 |
api_url += f"?ref={ref}"
|
| 33 |
|
| 34 |
python_files = []
|
| 35 |
-
api_results = requests.get(
|
|
|
|
|
|
|
| 36 |
|
| 37 |
for result in api_results:
|
| 38 |
-
if result
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
|
|
|
| 48 |
|
| 49 |
return python_files
|
|
|
|
| 7 |
|
| 8 |
# to increase api rate limiting
|
| 9 |
# https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting
|
| 10 |
+
USER = os.environ.get("USER", "")
|
| 11 |
PERSONAL_ACCESS_TOKEN = os.environ.get("PERSONAL_ACCESS_TOKEN", "")
|
| 12 |
|
| 13 |
|
|
|
|
| 32 |
api_url += f"?ref={ref}"
|
| 33 |
|
| 34 |
python_files = []
|
| 35 |
+
api_results = requests.get(
|
| 36 |
+
api_url, headers={"Accept": "application/vnd.github.v3+json"}
|
| 37 |
+
).json()
|
| 38 |
|
| 39 |
for result in api_results:
|
| 40 |
+
if type(result) is dict:
|
| 41 |
+
if result["type"] == "file" and result["name"].endswith(".py"):
|
| 42 |
+
python_files.append(result)
|
| 43 |
+
elif (
|
| 44 |
+
recursive
|
| 45 |
+
and result["type"] == "dir"
|
| 46 |
+
and not result["name"].startswith(".")
|
| 47 |
+
):
|
| 48 |
+
python_files += cls.get_python_files(
|
| 49 |
+
owner, repo, path=result["path"], recursive=recursive
|
| 50 |
+
)
|
| 51 |
|
| 52 |
return python_files
|
py_code_analyzer/imports_graph_visualizer.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
|
|
|
|
|
| 1 |
import networkx as nx
|
| 2 |
|
| 3 |
from pyvis import Network
|
|
|
|
| 1 |
+
"""This file generates a pyvis graph locally given a networkx graph
|
| 2 |
+
"""
|
| 3 |
import networkx as nx
|
| 4 |
|
| 5 |
from pyvis import Network
|
pyvis/pyvis/templates/template.html
CHANGED
|
@@ -346,6 +346,7 @@
|
|
| 346 |
nodeColors = {};
|
| 347 |
allNodes = nodes.get({ returnType: "Object" });
|
| 348 |
for (var nodeId in allNodes) {
|
|
|
|
| 349 |
nodeColors[nodeId] = allNodes[nodeId].color;
|
| 350 |
}
|
| 351 |
|
|
|
|
| 346 |
nodeColors = {};
|
| 347 |
allNodes = nodes.get({ returnType: "Object" });
|
| 348 |
for (var nodeId in allNodes) {
|
| 349 |
+
console.log(allNodes[nodeId].color);
|
| 350 |
nodeColors[nodeId] = allNodes[nodeId].color;
|
| 351 |
}
|
| 352 |
|