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

Commit 122a27b

Browse files
devdoomaridevdoomari3
authored andcommitted
add missing files due to git issues...
1 parent 083a9f8 commit 122a27b

File tree

9 files changed

+349
-0
lines changed

9 files changed

+349
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.mypy_cache
22
__pycache__
3+
.ide
34
.idea
45
.pyre
56
.python-version

py.typed

Whitespace-only changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from typing import Optional
2+
3+
4+
class ClassA:
5+
b: 'ClassB'
6+
7+
8+
class ClassB:
9+
a: Optional[ClassA]
10+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class ArgClass:
2+
arg1: str
3+
arg2: int
4+
5+
6+
def func_with_arg_class(a: ArgClass) -> ArgClass:
7+
return a
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import py_type_extractor.test_fixtures.generic_classes as t
2+
from py_type_extractor.test_fixtures.generic_classes import (
3+
SomeTypeVarB
4+
)
5+
6+
from typing import TypeVar, Generic
7+
8+
ExtendedTVar1 = TypeVar('ExtendedTVar1')
9+
ExtendedTVar2 = TypeVar('ExtendedTVar2')
10+
ExtendedTVar3 = TypeVar('ExtendedTVar3')
11+
12+
ExtendedTVarA = TypeVar('ExtendedTVarA')
13+
14+
class NotGenericClass:
15+
a: int
16+
17+
class SomeGenericInheritanceClass(
18+
NotGenericClass,
19+
t.SomeGenericClass[ExtendedTVar1, t.SomeTypeVarB],
20+
Generic[ExtendedTVar1, ExtendedTVar2, SomeTypeVarB]
21+
):
22+
pass
23+
24+
'''
25+
typing_inspect.get_parameters(t.SomeGenericClass) --> (~SomeTypeVarA, ~SomeTypeVarB)
26+
27+
28+
'''
29+
30+
class SomeGenericInheritanceClassWithTypevarsSet(
31+
SomeGenericInheritanceClass[float, ExtendedTVarA, str],
32+
Generic[ExtendedTVarA]
33+
):
34+
pass
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from py_type_extractor.type_extractor.__tests__.utils import hash_test
2+
from py_type_extractor.type_extractor.type_extractor import TypeExtractor
3+
from py_type_extractor.test_fixtures.class_with_circular_deps import (
4+
ClassA,
5+
)
6+
7+
def test_class_of_generic_origin():
8+
# TODO: make Lazy?
9+
# hashing by:
10+
type_extractor = TypeExtractor()
11+
type_extractor.add()(ClassA)
12+
print(type_extractor)
13+
14+
# fixme: circular-dep hash
15+
hash_test(type_extractor)
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import py_type_extractor.test_fixtures.generic_classes_extended as t
2+
import py_type_extractor.test_fixtures.generic_classes as t2
3+
4+
from py_type_extractor.type_extractor.__tests__.utils import traverse, cleanup, hash_test
5+
from py_type_extractor.type_extractor.nodes.ClassFound import ClassFound
6+
from py_type_extractor.type_extractor.nodes.FixedGenericFound import FixedGenericFound
7+
from py_type_extractor.type_extractor.nodes.FunctionFound import FunctionFound
8+
from py_type_extractor.type_extractor.nodes.TypeVarFound import TypeVarFound
9+
from py_type_extractor.type_extractor.type_extractor import TypeExtractor
10+
from py_type_extractor.type_extractor.utils.generics import flatten_generics_inheritance_to
11+
12+
module_name = t.__name__
13+
module2_name = t2.__name__
14+
15+
# noinspection PyPep8Naming
16+
def test_class_with_generic_instance_and_inheritance():
17+
type_extractor = TypeExtractor()
18+
type_extractor.add()(t.SomeGenericInheritanceClass)
19+
type_extractor.add()(t.SomeGenericInheritanceClassWithTypevarsSet)
20+
21+
collected_types = {
22+
key: traverse(value, cleanup)
23+
for (key, value) in type_extractor.collected_types.items()
24+
}
25+
26+
not_generic_class = ClassFound(
27+
module_name=module_name,
28+
name=t.NotGenericClass.__qualname__,
29+
fields={
30+
'a': int,
31+
}
32+
)
33+
34+
35+
assert collected_types[
36+
type_extractor.to_collected_types_key(
37+
module_name=module_name,
38+
typ_name=t.NotGenericClass.__qualname__,
39+
)
40+
] == not_generic_class
41+
42+
some_typevar_A = TypeVarFound(
43+
name='SomeTypeVarA',
44+
original=t2.SomeTypeVarA,
45+
)
46+
some_typevar_B = TypeVarFound(
47+
name='SomeTypeVarB',
48+
original=t2.SomeTypeVarB,
49+
)
50+
51+
some_generic_class = ClassFound(
52+
module_name=module2_name,
53+
name='SomeGenericClass',
54+
fields={
55+
'a': some_typevar_A,
56+
'b': some_typevar_B,
57+
'some_int': int,
58+
},
59+
type_vars=[
60+
some_typevar_A, some_typevar_B,
61+
],
62+
)
63+
64+
assert collected_types[
65+
type_extractor.to_collected_types_key(
66+
module_name=module2_name,
67+
typ_name=t2.SomeGenericClass.__qualname__,
68+
)
69+
] == some_generic_class
70+
71+
some_generic_class = ClassFound(
72+
module_name=module2_name,
73+
name='SomeGenericClass',
74+
fields={
75+
'a': some_typevar_A,
76+
'b': some_typevar_B,
77+
'some_int': int,
78+
},
79+
type_vars=[
80+
some_typevar_A, some_typevar_B,
81+
],
82+
)
83+
84+
extended_tvar1 = TypeVarFound(
85+
name='ExtendedTVar1',
86+
original=t.ExtendedTVar1,
87+
)
88+
extended_tvar2 = TypeVarFound(
89+
name='ExtendedTVar2',
90+
original=t.ExtendedTVar2,
91+
)
92+
extended_tvar2 = TypeVarFound(
93+
name='ExtendedTVar2',
94+
original=t.ExtendedTVar2,
95+
)
96+
some_generic_inheritance_class = ClassFound(
97+
module_name=module_name,
98+
name=t.SomeGenericInheritanceClass.__qualname__,
99+
type_vars=[extended_tvar1, extended_tvar2, some_typevar_B],
100+
fields={
101+
'a': int,
102+
},
103+
base_classes=[
104+
not_generic_class,
105+
FixedGenericFound(
106+
origin=some_generic_class,
107+
type_vars=[extended_tvar1, some_typevar_B],
108+
)
109+
]
110+
)
111+
112+
assert collected_types[
113+
type_extractor.to_collected_types_key(
114+
module_name=module_name,
115+
typ_name=t.SomeGenericInheritanceClass.__qualname__,
116+
)
117+
] == some_generic_inheritance_class
118+
119+
extended_tvarA = TypeVarFound(
120+
name='ExtendedTVarA',
121+
original=t.ExtendedTVarA,
122+
)
123+
124+
some_generic_inheritance_class_with_typevarsSet = ClassFound(
125+
module_name=module_name,
126+
name=t.SomeGenericInheritanceClassWithTypevarsSet.__qualname__,
127+
type_vars=[extended_tvarA],
128+
fields={
129+
'a': int,
130+
},
131+
base_classes=[
132+
FixedGenericFound(
133+
origin=some_generic_inheritance_class,
134+
type_vars=[float, extended_tvarA, str],
135+
)
136+
],
137+
)
138+
139+
assert collected_types[
140+
type_extractor.to_collected_types_key(
141+
module_name=module_name,
142+
typ_name=t.SomeGenericInheritanceClassWithTypevarsSet.__qualname__,
143+
)
144+
] == some_generic_inheritance_class_with_typevarsSet
145+
146+
flattened = flatten_generics_inheritance_to(
147+
from_typ=some_generic_inheritance_class_with_typevarsSet,
148+
to_typ=some_generic_class,
149+
)
150+
assert flattened == [
151+
FixedGenericFound(
152+
origin=some_generic_class,
153+
type_vars=[float, str]
154+
)
155+
]
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import py_type_extractor.test_fixtures.generic_classes as t
2+
from py_type_extractor.type_extractor.__tests__.utils import traverse, cleanup, hash_test
3+
from py_type_extractor.type_extractor.nodes.ClassFound import ClassFound
4+
from py_type_extractor.type_extractor.nodes.FixedGenericFound import FixedGenericFound
5+
from py_type_extractor.type_extractor.nodes.FunctionFound import FunctionFound
6+
from py_type_extractor.type_extractor.nodes.TypeVarFound import TypeVarFound
7+
from py_type_extractor.type_extractor.type_extractor import TypeExtractor
8+
9+
module_name = t.__name__
10+
11+
# noinspection PyPep8Naming
12+
def test_func_with_generic_instance():
13+
type_extractor = TypeExtractor()
14+
type_extractor.add()(t.some_func_with_generic_inst)
15+
print(type_extractor)
16+
17+
collected_types = {
18+
key: traverse(value, cleanup)
19+
for (key, value) in type_extractor.collected_types.items()
20+
}
21+
some_typevar_A = TypeVarFound(
22+
name='SomeTypeVarA',
23+
original=t.SomeTypeVarA,
24+
)
25+
some_typevar_B = TypeVarFound(
26+
name='SomeTypeVarB',
27+
original=t.SomeTypeVarB,
28+
)
29+
some_generic_class = ClassFound(
30+
module_name=module_name,
31+
name='SomeGenericClass',
32+
fields={
33+
'a': some_typevar_A,
34+
'b': some_typevar_B,
35+
'some_int': int,
36+
},
37+
type_vars=[
38+
some_typevar_A, some_typevar_B,
39+
],
40+
)
41+
some_class = ClassFound(
42+
module_name=module_name,
43+
name='SomeClass',
44+
fields={
45+
'some_property': int,
46+
}
47+
)
48+
assert collected_types[
49+
type_extractor.to_collected_types_key(
50+
module_name=module_name,
51+
typ_name=t.SomeGenericClass.__qualname__,
52+
)
53+
] == some_generic_class
54+
55+
assert collected_types[
56+
type_extractor.to_collected_types_key(
57+
module_name=module_name,
58+
typ_name=t.SomeClass.__qualname__,
59+
)
60+
] == some_class
61+
62+
assert collected_types[
63+
type_extractor.to_collected_types_key(
64+
module_name=module_name,
65+
typ_name=t.some_func_with_generic_inst.__qualname__,
66+
)
67+
] == FunctionFound(
68+
name='some_func_with_generic_inst',
69+
module_name=module_name,
70+
params={
71+
'input': FixedGenericFound(
72+
type_vars=[float, some_class],
73+
origin=some_generic_class,
74+
)
75+
},
76+
return_type=str,
77+
)
78+
79+
hash_test(type_extractor)
80+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# baseNode: BaseNodeType --> ( BaseNodeWithoutOptions, options )
2+
# Dict <
3+
# Hash(BaseNodeWithoutOptions) ,
4+
# options
5+
# >
6+
from typing import List, Set
7+
8+
from py_type_extractor.type_extractor.__tests__.test_class_with_union_field import SomeOption
9+
from py_type_extractor.type_extractor.nodes.BaseNodeType import NodeType
10+
from py_type_extractor.type_extractor.nodes.ClassFound import ClassFound
11+
from py_type_extractor.type_extractor.nodes.TypeOR import TypeOR
12+
13+
14+
def dedupe_type(
15+
node_list: List[NodeType],
16+
) -> Set[NodeType]:
17+
# Q. merging options?
18+
result = set()
19+
20+
21+
dedupe_type([
22+
ClassFound(
23+
name='ClassWithUnionField',
24+
fields={
25+
'cwufField1': TypeOR(
26+
a=str, b=int
27+
)
28+
},
29+
options={SomeOption(some_var=1)},
30+
),
31+
ClassFound(
32+
name='ClassWithUnionField',
33+
fields={
34+
'cwufField1': TypeOR(
35+
a=str, b=int
36+
)
37+
},
38+
options={},
39+
),
40+
])
41+
42+
43+
def a(ab: int):
44+
print(ab)
45+
46+
47+
a('aa')

0 commit comments

Comments
 (0)