oarepo-runtime 1.5.26__py3-none-any.whl → 1.5.27__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|