🌐 AI搜索 & 代理 主页
Skip to content

Commit fbacfe8

Browse files
devdoomaridevdoomari3
authored andcommitted
use module names to prevent same name duplicate errors
1 parent f004c5b commit fbacfe8

File tree

9 files changed

+39
-24
lines changed

9 files changed

+39
-24
lines changed

py_type_extractor/type_extractor/__tests__/test_class_of_generic_instance.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,13 @@ def test_class_of_generic_instance():
4646
'some_property': int,
4747
}
4848
)
49-
assert collected_types['SomeGenericClass'] == some_generic_class
49+
assert collected_types[
50+
'py_type_extractor.test_fixtures.generic_classes.SomeGenericClass'
51+
] == some_generic_class
5052

51-
assert collected_types['SomeClass'] == some_class
53+
assert collected_types[
54+
'py_type_extractor.test_fixtures.generic_classes.SomeClass'
55+
] == some_class
5256

5357
assert collected_types['some_func_with_generic_inst'] == FunctionFound(
5458
name='some_func_with_generic_inst',

py_type_extractor/type_extractor/__tests__/test_class_of_generic_origin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def test_class_of_generic_origin():
2626
original=SomeTypeVarB,
2727
)
2828
assert classes == {
29-
'SomeGenericClass': ClassFound(
29+
'py_type_extractor.test_fixtures.generic_classes.SomeGenericClass': ClassFound(
3030
name='SomeGenericClass',
3131
fields={
3232
'a': typevar_A,

py_type_extractor/type_extractor/__tests__/test_class_with_union_field.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def test_class_with_union_field():
2525
if isinstance(value, ClassFound)
2626
}
2727
assert classes == {
28-
'ClassWithUnionField': ClassFound(
28+
'py_type_extractor.test_fixtures.union_type_class.ClassWithUnionField': ClassFound(
2929
name='ClassWithUnionField',
3030
fields={
3131
'cwufField1': TypeOR(

py_type_extractor/type_extractor/__tests__/test_classes_with_inheritance.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ def test_classes_with_inheritance():
2828
},
2929
)
3030
assert classes == {
31-
'ParentClassA': parent_class_a,
32-
'ParentClassB': parent_class_b,
33-
'ChildClass': ClassFound(
31+
'py_type_extractor.test_fixtures.classes_with_inheritance.ParentClassA': parent_class_a,
32+
'py_type_extractor.test_fixtures.classes_with_inheritance.ParentClassB': parent_class_b,
33+
'py_type_extractor.test_fixtures.classes_with_inheritance.ChildClass': ClassFound(
3434
name='ChildClass',
3535
fields={
3636
'b': str,

py_type_extractor/type_extractor/__tests__/test_func_with_nested_arg_class.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ class ParentClass:
1919
def func_with_nested_arg_class(a: ParentClass) -> ParentClass:
2020
return a
2121

22-
cleanedup = traverse(type_collector.collected_types[ParentClass.__name__], cleanup)
22+
cleanedup = traverse(
23+
type_collector.collected_types[
24+
'py_type_extractor.type_extractor.__tests__.test_func_with_nested_arg_class.ParentClass'
25+
],
26+
cleanup,
27+
)
2328

2429
child_class = ClassFound(
2530
name='ChildClass',
@@ -45,4 +50,4 @@ def func_with_nested_arg_class(a: ParentClass) -> ParentClass:
4550
class_raw=ParentClass
4651
)
4752
parent_cleaned = traverse(parent_class, cleanup)
48-
assert(parent_cleaned == cleanedup)
53+
assert (parent_cleaned == cleanedup)

py_type_extractor/type_extractor/__tests__/test_newtype.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_newtype():
3737
},
3838
return_type=str,
3939
),
40-
'SomeClass': some_class,
40+
'py_type_extractor.test_fixtures.new_type.SomeClass': some_class,
4141
'SomeClassInNewType': NewTypeFound(
4242
name='SomeClassInNewType',
4343
actual=some_class,
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
from pydantic import BaseModel
2-
31
from py_type_extractor.type_extractor.nodes.ClassFound import ClassFound
42
from py_type_extractor.type_extractor.__tests__.utils import traverse, cleanup
5-
from py_type_extractor.type_extractor.nodes.DictFound import DictFound
63
from py_type_extractor.type_extractor.type_extractor import TypeExtractor
74
from py_type_extractor.test_fixtures.pydantic_classes import (
85
SomePydanticDataClass,
96
SomePydanticModelClass,
107
)
118

129

13-
def test_various_classes():
10+
def test_pydantic_classes():
1411
type_extractor = TypeExtractor()
1512
type_extractor.add(None)(SomePydanticModelClass)
1613
type_extractor.add(None)(SomePydanticDataClass)
@@ -21,19 +18,23 @@ def test_various_classes():
2118
for (key, value) in type_extractor.collected_types.items()
2219
if isinstance(value, ClassFound)
2320
}
24-
assert classes['SomePydanticDataClass'] == ClassFound(
21+
assert classes[
22+
'py_type_extractor.test_fixtures.pydantic_classes.SomePydanticDataClass'
23+
] == ClassFound(
2524
name='SomePydanticDataClass',
2625
fields={
2726
'a': int,
2827
'b': str,
2928
},
3029
)
3130

32-
assert classes['SomePydanticModelClass'] == ClassFound(
31+
assert classes[
32+
'py_type_extractor.test_fixtures.pydantic_classes.SomePydanticModelClass'
33+
] == ClassFound(
3334
name='SomePydanticModelClass',
3435
fields={
3536
'c': int,
3637
'something': float,
3738
},
38-
base_classes=[classes['BaseModel']],
39+
base_classes=[classes['pydantic.main.BaseModel']],
3940
)

py_type_extractor/type_extractor/__tests__/test_various_classes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ def test_various_classes():
2121
if isinstance(value, ClassFound)
2222
}
2323
assert classes == {
24-
'SomeDataClass': ClassFound(
24+
'py_type_extractor.test_fixtures.various_classes.SomeDataClass': ClassFound(
2525
name='SomeDataClass',
2626
fields={
2727
'sdcArg1': int,
2828
'sdcArg2': str,
2929
},
3030
),
31-
'SomeNormalClass': ClassFound(
31+
'py_type_extractor.test_fixtures.various_classes.SomeNormalClass': ClassFound(
3232
name='SomeNormalClass',
3333
fields={
3434
'checklist': DictFound(key=str, value=bool),
3535
},
3636
),
37-
'SomeNamedTuple': ClassFound(
37+
'py_type_extractor.test_fixtures.various_classes.SomeNamedTuple': ClassFound(
3838
name='SomeNamedTuple',
3939
fields={
4040
'sntArg1': int,

py_type_extractor/type_extractor/middlewares/class_found.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ def class_found_middleware(
2323
or isinstance(_class, _TypedDictMeta):
2424
return None
2525

26-
duplicate = type_extractor.collected_types.get(_class.__name__)
26+
module = inspect.getmodule(_class)
27+
module_name = module.__name__
28+
29+
name = _class.__name__
30+
31+
duplicate = type_extractor.collected_types.get(f"{module_name}.{name}")
2732
if duplicate is not None:
2833
assert isinstance(duplicate, ClassFound) \
2934
and duplicate.class_raw == _class
@@ -41,7 +46,7 @@ def class_found_middleware(
4146
])
4247

4348
argspec = inspect.getfullargspec(_data_class)
44-
module = inspect.getmodule(_class)
49+
4550
filename = module and module.__file__
4651
annotations: Dict = getattr(_class, '__annotations__', argspec.annotations)
4752
fields = type_extractor.params_to_nodes(annotations, annotations.keys())
@@ -51,7 +56,7 @@ def class_found_middleware(
5156
list(typing_inspect.get_parameters(_class))
5257
]
5358
class_found = ClassFound(
54-
name=_class.__name__,
59+
name=name,
5560
class_raw=_class,
5661
filePath=filename,
5762
base_classes=base_classes,
@@ -62,5 +67,5 @@ def class_found_middleware(
6267
type_vars=type_vars,
6368
)
6469

65-
type_extractor.collected_types[class_found.name] = class_found
70+
type_extractor.collected_types[f"{module_name}.{name}"] = class_found
6671
return class_found

0 commit comments

Comments
 (0)