cyyeh commited on
Commit
9c710c0
·
1 Parent(s): 5b4c973

update pyvis

Browse files
.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": "0006fdd10642d6c40ca9dc5aaaa8f3d586465b1f5c1a306b70eb71b3559d707f"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
@@ -21,7 +21,7 @@
21
  "sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a",
22
  "sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"
23
  ],
24
- "markers": "python_version >= '3.7'",
25
  "version": "==4.2.0"
26
  },
27
  "appnope": {
@@ -124,7 +124,7 @@
124
  "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1",
125
  "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"
126
  ],
127
- "markers": "python_version >= '3.7'",
128
  "version": "==5.0.0"
129
  },
130
  "blinker": {
@@ -217,7 +217,7 @@
217
  "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
218
  "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
219
  ],
220
- "markers": "python_version >= '3.7'",
221
  "version": "==8.1.3"
222
  },
223
  "commonmark": {
@@ -248,7 +248,7 @@
248
  "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f",
249
  "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"
250
  ],
251
- "markers": "python_version >= '3.7'",
252
  "version": "==1.6.0"
253
  },
254
  "decorator": {
@@ -302,7 +302,7 @@
302
  "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
303
  "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
304
  ],
305
- "markers": "python_version >= '3.7'",
306
  "version": "==3.1.27"
307
  },
308
  "idna": {
@@ -318,7 +318,7 @@
318
  "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700",
319
  "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"
320
  ],
321
- "markers": "python_version >= '3.7'",
322
  "version": "==4.11.4"
323
  },
324
  "importlib-resources": {
@@ -372,7 +372,7 @@
372
  "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
373
  "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
374
  ],
375
- "markers": "python_version >= '3.7'",
376
  "version": "==3.1.2"
377
  },
378
  "jsonpickle": {
@@ -388,7 +388,7 @@
388
  "sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf",
389
  "sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"
390
  ],
391
- "markers": "python_version >= '3.7'",
392
  "version": "==4.6.0"
393
  },
394
  "jupyter-client": {
@@ -396,7 +396,7 @@
396
  "sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b",
397
  "sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef"
398
  ],
399
- "markers": "python_version >= '3.7'",
400
  "version": "==7.3.1"
401
  },
402
  "jupyter-core": {
@@ -404,7 +404,7 @@
404
  "sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec",
405
  "sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"
406
  ],
407
- "markers": "python_version >= '3.7'",
408
  "version": "==4.10.0"
409
  },
410
  "jupyterlab-pygments": {
@@ -412,7 +412,7 @@
412
  "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
413
  "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
414
  ],
415
- "markers": "python_version >= '3.7'",
416
  "version": "==0.2.2"
417
  },
418
  "jupyterlab-widgets": {
@@ -466,7 +466,7 @@
466
  "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
467
  "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
468
  ],
469
- "markers": "python_version >= '3.7'",
470
  "version": "==2.1.1"
471
  },
472
  "matplotlib-inline": {
@@ -489,7 +489,7 @@
489
  "sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e",
490
  "sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"
491
  ],
492
- "markers": "python_version >= '3.7'",
493
  "version": "==0.6.4"
494
  },
495
  "nbconvert": {
@@ -497,7 +497,7 @@
497
  "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d",
498
  "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"
499
  ],
500
- "markers": "python_version >= '3.7'",
501
  "version": "==6.5.0"
502
  },
503
  "nbformat": {
@@ -505,7 +505,7 @@
505
  "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad",
506
  "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"
507
  ],
508
- "markers": "python_version >= '3.7'",
509
  "version": "==5.4.0"
510
  },
511
  "nest-asyncio": {
@@ -518,18 +518,18 @@
518
  },
519
  "networkx": {
520
  "hashes": [
521
- "sha256:51d6ae63c24dcd33901357688a2ad20d6bcd38f9a4c5307720048d3a8081059c",
522
- "sha256:ae99c9b0d35e5b4a62cf1cfea01e5b3633d8d02f4a0ead69685b6e7de5b85eab"
523
  ],
524
  "index": "pypi",
525
- "version": "==2.8.2"
526
  },
527
  "notebook": {
528
  "hashes": [
529
  "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a",
530
  "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"
531
  ],
532
- "markers": "python_version >= '3.7'",
533
  "version": "==6.4.11"
534
  },
535
  "numpy": {
@@ -705,7 +705,7 @@
705
  "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a",
706
  "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"
707
  ],
708
- "markers": "python_version >= '3.7'",
709
  "version": "==9.1.1"
710
  },
711
  "prometheus-client": {
@@ -751,7 +751,7 @@
751
  "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20",
752
  "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"
753
  ],
754
- "markers": "python_version >= '3.7'",
755
  "version": "==3.20.1"
756
  },
757
  "psutil": {
@@ -840,7 +840,7 @@
840
  "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab",
841
  "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"
842
  ],
843
- "markers": "python_version >= '3.7'",
844
  "version": "==8.0.0"
845
  },
846
  "pycparser": {
@@ -855,7 +855,7 @@
855
  "sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503",
856
  "sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"
857
  ],
858
- "markers": "python_version >= '3.7'",
859
  "version": "==0.7.1"
860
  },
861
  "pygments": {
@@ -906,7 +906,7 @@
906
  "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
907
  "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
908
  ],
909
- "markers": "python_version >= '3.7'",
910
  "version": "==0.18.1"
911
  },
912
  "python-dateutil": {
@@ -933,11 +933,8 @@
933
  "version": "==0.1.0.post0"
934
  },
935
  "pyvis": {
936
- "hashes": [
937
- "sha256:29b94d0a10a01ac790d262318680369baa9e5eb8524c355758f1c3799f0c3965"
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": "python_version >= '3.7'",
1081
  "version": "==0.15.0"
1082
  },
1083
  "tinycss2": {
@@ -1156,7 +1153,7 @@
1156
  "sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b",
1157
  "sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"
1158
  ],
1159
- "markers": "python_version >= '3.7'",
1160
  "version": "==5.2.2.post1"
1161
  },
1162
  "typing-extensions": {
@@ -1271,7 +1268,7 @@
1271
  "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
1272
  "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
1273
  ],
1274
- "markers": "python_version >= '3.7'",
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.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.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.imports += [
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 _import in self.imports:
52
- _nodes = _import["file_path"].split("/")
53
  if len(_nodes):
 
 
54
  if len(_nodes) > 1:
55
- for first_node, second_node in zip(_nodes, _nodes[1:]):
56
- self.imports_graph.add_edge(first_node, second_node)
 
 
 
 
57
  else:
58
  self.imports_graph.add_node(_nodes[0])
59
 
 
 
 
 
 
 
 
 
 
 
 
60
  return self.imports_graph
61
 
62
  def report(self):
63
- pprint(self.imports)
 
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
- from pyvis.network import Network
 
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 = 100,
 
13
  display_html_name: str = "nx.html",
14
  ):
15
- _pyvis_network = Network(f"{width}%", f"{height}%", directed=directed)
 
 
 
 
 
 
 
 
 
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