oarepo-runtime 1.5.26__py3-none-any.whl → 1.5.27__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- oarepo_runtime/services/schema/__init__.py +40 -1
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/METADATA +1 -1
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/RECORD +7 -7
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/LICENSE +0 -0
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/WHEEL +0 -0
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-1.5.26.dist-info → oarepo_runtime-1.5.27.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,42 @@
|
|
1
1
|
from .polymorphic import PolymorphicSchema
|
2
2
|
|
3
|
-
|
3
|
+
|
4
|
+
def consistent_resolution(*classes):
|
5
|
+
"""
|
6
|
+
A helper function to solve resolution order of classes.
|
7
|
+
If the classes are in a correct mro order, it will return
|
8
|
+
them in the same order. Otherwise it will try to reorder
|
9
|
+
them and remove those that are already contained in mro
|
10
|
+
of others.
|
11
|
+
"""
|
12
|
+
|
13
|
+
# remove classes that are already in mro of others
|
14
|
+
filtered_classes = []
|
15
|
+
for cls in classes:
|
16
|
+
for other_cls in classes:
|
17
|
+
if cls != other_cls and issubclass(other_cls, cls):
|
18
|
+
break
|
19
|
+
else:
|
20
|
+
if cls not in filtered_classes:
|
21
|
+
filtered_classes.append(cls)
|
22
|
+
|
23
|
+
name = [cls.__name__ for cls in filtered_classes]
|
24
|
+
name = "".join(name) + "ConsistentResolution"
|
25
|
+
try:
|
26
|
+
return type(name, tuple(filtered_classes), {})
|
27
|
+
except TypeError:
|
28
|
+
pass
|
29
|
+
|
30
|
+
filtered_classes.sort(key=lambda cls: -len(cls.mro()))
|
31
|
+
try:
|
32
|
+
return type(name, tuple(filtered_classes), {})
|
33
|
+
except TypeError:
|
34
|
+
pass
|
35
|
+
|
36
|
+
bases = ", ".join(cls.__name__ for cls in filtered_classes)
|
37
|
+
orig_bases = ", ".join(cls.__name__ for cls in classes)
|
38
|
+
raise TypeError(f"Cannot create a consistent method resolution order (MRO) "
|
39
|
+
f"for bases {orig_bases}, tried {bases}")
|
40
|
+
|
41
|
+
|
42
|
+
__all__ = ("PolymorphicSchema", "consistent_resolution")
|
@@ -94,7 +94,7 @@ oarepo_runtime/services/relations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
94
94
|
oarepo_runtime/services/relations/components.py,sha256=3g0VdnGUM-2yYt50fPi-OADReBGJb4h05vmYHfh-QFs,592
|
95
95
|
oarepo_runtime/services/relations/errors.py,sha256=VtlOKq9MEUeJ4IsiZhY7lWoshrusA_RL4SOHe2titno,552
|
96
96
|
oarepo_runtime/services/relations/mapping.py,sha256=D7IYk83SXVgTv-0ohSnHOCzvCwbFLXJsayO1eQfQn0U,1285
|
97
|
-
oarepo_runtime/services/schema/__init__.py,sha256=
|
97
|
+
oarepo_runtime/services/schema/__init__.py,sha256=gD0II1Lz6fnW1Cgt4gtneZeyKWl_YZ47Wu0gmeKqtH8,1395
|
98
98
|
oarepo_runtime/services/schema/cf.py,sha256=-m9seIH5VYUdxDsJlPVXS0-8f7xkpN7YfW1q9E1GacI,475
|
99
99
|
oarepo_runtime/services/schema/i18n.py,sha256=myyg0tU8up0BmMt9IESKD91w5KC0V9v8Qa-9fF0ptIs,1341
|
100
100
|
oarepo_runtime/services/schema/i18n_ui.py,sha256=18tA6uA067TP_wcit47hTel2M4hz88wYtwBgaeZDrew,1880
|
@@ -114,9 +114,9 @@ oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
114
114
|
oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
|
115
115
|
oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
|
116
116
|
tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
|
-
oarepo_runtime-1.5.
|
118
|
-
oarepo_runtime-1.5.
|
119
|
-
oarepo_runtime-1.5.
|
120
|
-
oarepo_runtime-1.5.
|
121
|
-
oarepo_runtime-1.5.
|
122
|
-
oarepo_runtime-1.5.
|
117
|
+
oarepo_runtime-1.5.27.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
118
|
+
oarepo_runtime-1.5.27.dist-info/METADATA,sha256=eoNvUBPIChZDm5WvR3uWxNa8dnww3jjZqEHLOsZ11go,4680
|
119
|
+
oarepo_runtime-1.5.27.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
120
|
+
oarepo_runtime-1.5.27.dist-info/entry_points.txt,sha256=QrlXAKuPDVBinaSh_v3yO9_Nb9ZNmJCJ0VFcCW-z0Jg,327
|
121
|
+
oarepo_runtime-1.5.27.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
|
122
|
+
oarepo_runtime-1.5.27.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|