Skip to content
This repository was archived by the owner on Jan 19, 2025. It is now read-only.

Commit f6fc3fa

Browse files
jofaulAclrianGideonKoenig
authored
feat: 433 Creates a Dict from a given json List (#437)
* Creates a Dict from a given json List * Changed wrong Type Str to str * style: apply automatic fixes of linters * fix: pytest failed on expected exception * fix: file location is required * style: apply automatic fixes of linters * fix: assumed wrong working dir * removed changes in .idea and added it to gitignore of package-parser * revert changes in .idea folder * improve code style Co-authored-by: jofaul <[email protected]> Co-authored-by: Aclrian <[email protected]> Co-authored-by: Aclrian <[email protected]> Co-authored-by: GideonKoenig <[email protected]>
1 parent 15f530c commit f6fc3fa

File tree

6 files changed

+120
-0
lines changed

6 files changed

+120
-0
lines changed

package-parser/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,6 @@ out/
3030

3131
# VSCode Settings
3232
.vscode/
33+
34+
# IntelliJ/Pycharm settings
35+
.idea/

package-parser/package_parser/commands/generate_annotations/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import json
2+
import re
3+
from typing import Dict, List, Tuple
4+
5+
6+
def generate_unused_annotations(in_file_path: str):
7+
"""
8+
Returns a Dict of unused functions or classes
9+
10+
:param in_file_path: JSON file that contains a list of unused functions or classes
11+
"""
12+
13+
with open(in_file_path, "r", encoding="UTF-8") as in_file:
14+
data = json.load(in_file)
15+
16+
unuseds: Dict[str, Dict[str, str]] = {}
17+
for name in data:
18+
formatted_name = format_name(name)
19+
unuseds[formatted_name] = {"target": formatted_name}
20+
21+
return unuseds
22+
23+
24+
def format_name(name: str):
25+
if name is None:
26+
return None
27+
28+
parts = re.split("\\.", name)
29+
newname = "sklearn/" + parts[0]
30+
31+
if len(parts) == 1:
32+
return newname
33+
34+
slash = False
35+
for part in parts[1:-1]:
36+
if not slash and re.match("^_{0,2}[A-Z]", part):
37+
slash = True
38+
if slash:
39+
newname += "/" + part
40+
else:
41+
newname += "." + part
42+
43+
newname += "/" + parts[-1]
44+
return newname

package-parser/tests/commands/generate_annotations/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import pytest
2+
from package_parser.commands.generate_annotations._generate_unused_annotations import (
3+
format_name,
4+
generate_unused_annotations,
5+
)
6+
7+
EXPECTED_VALUE = {
8+
"sklearn/sklearn.base/_BaseEstimator/__setstate__": {
9+
"target": "sklearn/sklearn.base/_BaseEstimator/__setstate__"
10+
},
11+
"sklearn/sklearn.base/is_regressor": {
12+
"target": "sklearn/sklearn.base/is_regressor"
13+
},
14+
"sklearn/sklearn.cluster._agglomerative/linkage_tree": {
15+
"target": "sklearn/sklearn.cluster._agglomerative/linkage_tree"
16+
},
17+
"sklearn/sklearn.cluster._kmeans/MiniBatchKMeans/init_size_": {
18+
"target": "sklearn/sklearn.cluster._kmeans/MiniBatchKMeans/init_size_"
19+
},
20+
}
21+
22+
23+
def test_format_underscores():
24+
assert (
25+
format_name("sklearn.cluster._kmeans._MiniBatchKMeans.random_state_")
26+
== "sklearn/sklearn.cluster._kmeans/_MiniBatchKMeans/random_state_"
27+
)
28+
29+
30+
def test_format_uppercase():
31+
assert (
32+
format_name("sklearn.cluster._kmeans.MiniBatchKMeans.random_state_")
33+
== "sklearn/sklearn.cluster._kmeans/MiniBatchKMeans/random_state_"
34+
)
35+
36+
37+
def test_format_normal():
38+
assert (
39+
format_name("sklearn.cluster._mean_shift.get_bin_seeds")
40+
== "sklearn/sklearn.cluster._mean_shift/get_bin_seeds"
41+
)
42+
43+
44+
def test_format_one_part():
45+
assert format_name("test") == "sklearn/test"
46+
47+
48+
def test_format_none():
49+
assert format_name(None) is None
50+
51+
52+
def test_format_empty():
53+
assert format_name("") == "sklearn/"
54+
55+
56+
def test_generate():
57+
assert (
58+
generate_unused_annotations(
59+
"tests/commands/generate_annotations/unused_functions_list.json"
60+
)
61+
== EXPECTED_VALUE
62+
)
63+
64+
65+
def test_generate_bad_path():
66+
with pytest.raises(FileNotFoundError):
67+
generate_unused_annotations("aaaaaaaaaaaAAAAAAAAAAAA")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
"sklearn.base._BaseEstimator.__setstate__",
3+
"sklearn.base.is_regressor",
4+
"sklearn.cluster._agglomerative.linkage_tree",
5+
"sklearn.cluster._kmeans.MiniBatchKMeans.init_size_"
6+
]

0 commit comments

Comments
 (0)