Skip to content

Commit b63a285

Browse files
committed
Update normalize_annotation
1 parent 1a709a9 commit b63a285

File tree

1 file changed

+43
-37
lines changed

1 file changed

+43
-37
lines changed
Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,57 @@
1-
import sys
21
import importlib.machinery
2+
import inspect
3+
import sys
34
import types
4-
import ast
55
import mypy.fastparse
6-
import inspect
76

87

9-
annotation = sys.argv[1]
10-
project_root = sys.argv[2]
11-
path = sys.argv[3]
12-
for extra_path in sys.argv[4:]:
13-
sys.path.append(extra_path)
8+
def main(annotation: str, project_root: str, path: str):
9+
def walk_mypy_type(mypy_type) -> str:
10+
try:
11+
source = inspect.getfile(eval(mypy_type.name))
12+
in_project = source.startswith(project_root)
13+
except:
14+
in_project = False
15+
16+
modname = eval(mypy_type.name).__module__
17+
if modname != '' and not in_project:
18+
file_name = mypy_type.name.split('.')[-1]
19+
fullname = f'{modname}.{file_name}'
20+
else:
21+
fullname = mypy_type.name
22+
23+
result = fullname
24+
if len(mypy_type.args) != 0:
25+
arg_strs = [
26+
walk_mypy_type(arg)
27+
for arg in mypy_type.args
28+
]
29+
result += f"[{', '.join(arg_strs)}]"
30+
return result
1431

15-
16-
def walk_mypy_type(mypy_type):
1732
try:
18-
source = inspect.getfile(eval(mypy_type.name))
19-
in_project = source.startswith(project_root)
20-
except:
21-
in_project = False
33+
loader = importlib.machinery.SourceFileLoader('', path)
34+
mod = types.ModuleType(loader.name)
35+
loader.exec_module(mod)
2236

23-
modname = eval(mypy_type.name).__module__
24-
if modname != "" and (not in_project):
25-
name = mypy_type.name.split('.')[-1]
26-
fullname = modname + '.' + name
27-
else:
28-
fullname = mypy_type.name
37+
for name in dir(mod):
38+
globals()[name] = getattr(mod, name)
2939

30-
result = fullname
31-
if len(mypy_type.args) != 0:
32-
arg_strs = []
33-
for arg in mypy_type.args:
34-
arg_strs.append(walk_mypy_type(arg))
35-
result += '[' + ','.join(arg_strs) + ']'
36-
return result
40+
mypy_type_ = mypy.fastparse.parse_type_string(annotation, annotation, -1, -1)
41+
print(walk_mypy_type(mypy_type_), end='')
3742

43+
except:
44+
print(annotation, end='')
3845

39-
try:
40-
loader = importlib.machinery.SourceFileLoader("", path)
41-
mod = types.ModuleType(loader.name)
42-
loader.exec_module(mod)
4346

44-
for name in dir(mod):
45-
globals()[name] = getattr(mod, name)
47+
def get_args():
48+
annotation = sys.argv[1]
49+
project_root = sys.argv[2]
50+
path = sys.argv[3]
51+
for extra_path in sys.argv[4:]:
52+
sys.path.append(extra_path)
53+
return annotation, project_root, path
4654

47-
mypy_type = mypy.fastparse.parse_type_string(annotation, annotation, -1, -1)
48-
print(walk_mypy_type(mypy_type))
4955

50-
except:
51-
print(annotation)
56+
if __name__ == '__main__':
57+
main(*get_args())

0 commit comments

Comments
 (0)