oarepo-runtime 1.5.29__tar.gz → 1.5.30__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {oarepo-runtime-1.5.29/oarepo_runtime.egg-info → oarepo-runtime-1.5.30}/PKG-INFO +1 -1
- oarepo-runtime-1.5.30/oarepo_runtime/services/schema/oneofschema.py +192 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/polymorphic.py +2 -2
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30/oarepo_runtime.egg-info}/PKG-INFO +1 -1
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/SOURCES.txt +1 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/setup.cfg +1 -1
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/LICENSE +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/MANIFEST.in +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/README.md +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/assets.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/base.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/cf.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/check.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/configuration.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/fixtures.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/index.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/cli/validate.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/asynchronous.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/catalogue.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/datastreams.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/errors.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/ext.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/fixtures.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/json.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/excel.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/json.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/synchronous.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/transformers.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/types.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/utils.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/utils.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/ext.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/ext_config.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/i18n/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/info/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/info/views.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/profile.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/proxies.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/dumpers/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/owners/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/owners/registry.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/base.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/internal.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/lookup.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/pid_relation.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/icu.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/mapping.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/owner.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/record_status.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/selectors.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/resources/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/resources/file_resource.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/components.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/config/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/config/permissions_presets.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/config/service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/expansions/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/expansions/service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/base.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/date.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/enum.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/max_facet.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/nested_facet.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/params.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/files/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/files/service.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/generators.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/components.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/errors.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/mapping.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/results.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/cf.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/i18n.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/marshmallow.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/ui.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/validation.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/search.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/default_translations.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/messages.pot +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/uow.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/utils/__init__.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/utils/functools.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/utils/path.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/entry_points.txt +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/requires.txt +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/top_level.txt +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/pyproject.toml +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/setup.py +0 -0
- {oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/tests/pkg_data/__init__.py +0 -0
@@ -0,0 +1,192 @@
|
|
1
|
+
import typing
|
2
|
+
|
3
|
+
from marshmallow import Schema, ValidationError
|
4
|
+
|
5
|
+
|
6
|
+
class OneOfSchema(Schema):
|
7
|
+
"""
|
8
|
+
This is a special kind of schema that actually multiplexes other schemas
|
9
|
+
based on object type. When serializing values, it uses get_obj_type() method
|
10
|
+
to get object type name. Then it uses `type_schemas` name-to-Schema mapping
|
11
|
+
to get schema for that particular object type, serializes object using that
|
12
|
+
schema and adds an extra "type" field with name of object type.
|
13
|
+
Deserialization is reverse.
|
14
|
+
|
15
|
+
Example:
|
16
|
+
|
17
|
+
class Foo(object):
|
18
|
+
def __init__(self, foo):
|
19
|
+
self.foo = foo
|
20
|
+
|
21
|
+
class Bar(object):
|
22
|
+
def __init__(self, bar):
|
23
|
+
self.bar = bar
|
24
|
+
|
25
|
+
class FooSchema(marshmallow.Schema):
|
26
|
+
foo = marshmallow.fields.String(required=True)
|
27
|
+
|
28
|
+
@marshmallow.post_load
|
29
|
+
def make_foo(self, data, **kwargs):
|
30
|
+
return Foo(**data)
|
31
|
+
|
32
|
+
class BarSchema(marshmallow.Schema):
|
33
|
+
bar = marshmallow.fields.Integer(required=True)
|
34
|
+
|
35
|
+
@marshmallow.post_load
|
36
|
+
def make_bar(self, data, **kwargs):
|
37
|
+
return Bar(**data)
|
38
|
+
|
39
|
+
class MyUberSchema(marshmallow.OneOfSchema):
|
40
|
+
type_schemas = {
|
41
|
+
'foo': FooSchema,
|
42
|
+
'bar': BarSchema,
|
43
|
+
}
|
44
|
+
|
45
|
+
def get_obj_type(self, obj):
|
46
|
+
if isinstance(obj, Foo):
|
47
|
+
return 'foo'
|
48
|
+
elif isinstance(obj, Bar):
|
49
|
+
return 'bar'
|
50
|
+
else:
|
51
|
+
raise Exception('Unknown object type: %s' % repr(obj))
|
52
|
+
|
53
|
+
MyUberSchema().dump([Foo(foo='hello'), Bar(bar=123)], many=True)
|
54
|
+
# => [{'type': 'foo', 'foo': 'hello'}, {'type': 'bar', 'bar': 123}]
|
55
|
+
|
56
|
+
You can control type field name added to serialized object representation by
|
57
|
+
setting `type_field` class property.
|
58
|
+
"""
|
59
|
+
|
60
|
+
type_field = "type"
|
61
|
+
type_field_remove = True
|
62
|
+
type_schemas: typing.Mapping[str, typing.Union[typing.Type[Schema], Schema]] = {}
|
63
|
+
|
64
|
+
def get_obj_type(self, obj):
|
65
|
+
"""Returns name of the schema during dump() calls, given the object
|
66
|
+
being dumped."""
|
67
|
+
return obj.__class__.__name__
|
68
|
+
|
69
|
+
def get_data_type(self, data):
|
70
|
+
"""Returns name of the schema during load() calls, given the data being
|
71
|
+
loaded. Defaults to looking up `type_field` in the data."""
|
72
|
+
data_type = data.get(self.type_field)
|
73
|
+
if self.type_field in data and self.type_field_remove:
|
74
|
+
data.pop(self.type_field)
|
75
|
+
return data_type
|
76
|
+
|
77
|
+
def dump(self, obj, *, many=None, **kwargs):
|
78
|
+
errors = {}
|
79
|
+
result_data = []
|
80
|
+
result_errors = {}
|
81
|
+
many = self.many if many is None else bool(many)
|
82
|
+
if not many:
|
83
|
+
result = result_data = self._dump(obj, **kwargs)
|
84
|
+
else:
|
85
|
+
for idx, o in enumerate(obj):
|
86
|
+
try:
|
87
|
+
result = self._dump(o, **kwargs)
|
88
|
+
result_data.append(result)
|
89
|
+
except ValidationError as error:
|
90
|
+
result_errors[idx] = error.normalized_messages()
|
91
|
+
result_data.append(error.valid_data)
|
92
|
+
|
93
|
+
result = result_data
|
94
|
+
errors = result_errors
|
95
|
+
|
96
|
+
if not errors:
|
97
|
+
return result
|
98
|
+
else:
|
99
|
+
exc = ValidationError(errors, data=obj, valid_data=result)
|
100
|
+
raise exc
|
101
|
+
|
102
|
+
def _dump(self, obj, *, update_fields=True, **kwargs):
|
103
|
+
obj_type = self.get_obj_type(obj)
|
104
|
+
if obj_type is None:
|
105
|
+
return (
|
106
|
+
None,
|
107
|
+
{"_schema": "Unknown object class: %s" % obj.__class__.__name__},
|
108
|
+
)
|
109
|
+
|
110
|
+
type_schema = self.type_schemas.get(obj_type)
|
111
|
+
if not type_schema:
|
112
|
+
return None, {"_schema": "Unsupported object type: %s" % obj_type}
|
113
|
+
|
114
|
+
schema = type_schema if isinstance(type_schema, Schema) else type_schema()
|
115
|
+
|
116
|
+
schema.context.update(getattr(self, "context", {}))
|
117
|
+
|
118
|
+
result = schema.dump(obj, many=False, **kwargs)
|
119
|
+
if result is not None:
|
120
|
+
result[self.type_field] = obj_type
|
121
|
+
return result
|
122
|
+
|
123
|
+
def load(self, data, *, many=None, partial=None, unknown=None, **kwargs):
|
124
|
+
errors = {}
|
125
|
+
result_data = []
|
126
|
+
result_errors = {}
|
127
|
+
many = self.many if many is None else bool(many)
|
128
|
+
if partial is None:
|
129
|
+
partial = self.partial
|
130
|
+
if not many:
|
131
|
+
try:
|
132
|
+
result_data = self._load(
|
133
|
+
data, partial=partial, unknown=unknown, **kwargs
|
134
|
+
)
|
135
|
+
except ValidationError as error:
|
136
|
+
result_errors = error.normalized_messages()
|
137
|
+
result_data = error.valid_data
|
138
|
+
else:
|
139
|
+
for idx, item in enumerate(data):
|
140
|
+
try:
|
141
|
+
result = self._load(item, partial=partial, **kwargs)
|
142
|
+
result_data.append(result)
|
143
|
+
except ValidationError as error:
|
144
|
+
result_errors[idx] = error.normalized_messages()
|
145
|
+
result_data.append(error.valid_data)
|
146
|
+
|
147
|
+
result = result_data
|
148
|
+
errors = result_errors
|
149
|
+
|
150
|
+
if not errors:
|
151
|
+
return result
|
152
|
+
else:
|
153
|
+
exc = ValidationError(errors, data=data, valid_data=result)
|
154
|
+
raise exc
|
155
|
+
|
156
|
+
def _load(self, data, *, partial=None, unknown=None, **kwargs):
|
157
|
+
if not isinstance(data, dict):
|
158
|
+
raise ValidationError({"_schema": "Invalid data type: %s" % data})
|
159
|
+
|
160
|
+
data = dict(data)
|
161
|
+
unknown = unknown or self.unknown
|
162
|
+
data_type = self.get_data_type(data)
|
163
|
+
|
164
|
+
if data_type is None:
|
165
|
+
raise ValidationError(
|
166
|
+
{self.type_field: ["Missing data for required field."]}
|
167
|
+
)
|
168
|
+
|
169
|
+
try:
|
170
|
+
type_schema = self.type_schemas.get(data_type)
|
171
|
+
except TypeError as error:
|
172
|
+
# data_type could be unhashable
|
173
|
+
raise ValidationError(
|
174
|
+
{self.type_field: ["Invalid value: %s" % data_type]}
|
175
|
+
) from error
|
176
|
+
if not type_schema:
|
177
|
+
raise ValidationError(
|
178
|
+
{self.type_field: ["Unsupported value: %s" % data_type]}
|
179
|
+
)
|
180
|
+
|
181
|
+
schema = type_schema if isinstance(type_schema, Schema) else type_schema()
|
182
|
+
|
183
|
+
schema.context.update(getattr(self, "context", {}))
|
184
|
+
|
185
|
+
return schema.load(data, many=False, partial=partial, unknown=unknown, **kwargs)
|
186
|
+
|
187
|
+
def validate(self, data, *, many=None, partial=None):
|
188
|
+
try:
|
189
|
+
self.load(data, many=many, partial=partial)
|
190
|
+
except ValidationError as ve:
|
191
|
+
return ve.messages
|
192
|
+
return {}
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/polymorphic.py
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
from functools import cached_property
|
2
2
|
|
3
3
|
import marshmallow as ma
|
4
|
-
from marshmallow_oneofschema import OneOfSchema
|
5
|
-
|
4
|
+
#from marshmallow_oneofschema import OneOfSchema
|
5
|
+
from oarepo_runtime.services.schema.oneofschema import OneOfSchema
|
6
6
|
|
7
7
|
class PolymorphicSchema(OneOfSchema):
|
8
8
|
type_field_remove = False
|
@@ -112,6 +112,7 @@ oarepo_runtime/services/schema/i18n.py
|
|
112
112
|
oarepo_runtime/services/schema/i18n_ui.py
|
113
113
|
oarepo_runtime/services/schema/i18n_validation.py
|
114
114
|
oarepo_runtime/services/schema/marshmallow.py
|
115
|
+
oarepo_runtime/services/schema/oneofschema.py
|
115
116
|
oarepo_runtime/services/schema/polymorphic.py
|
116
117
|
oarepo_runtime/services/schema/ui.py
|
117
118
|
oarepo_runtime/services/schema/validation.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/attachments.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/readers/service.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/semi_asynchronous.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/datastreams/writers/service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/dumpers/edtf_interval.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/entity_resolvers/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/entity_resolvers/proxies.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/__init__.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/internal.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/relations/pid_relation.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/featured_file.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/mapping.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/owner.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/record_status.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/selectors.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/records/systemfields/synthetic.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/custom_fields/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/custom_fields/mappings.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/expansions/__init__.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/expansions/service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/facet_groups_names.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/facets/nested_facet.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/components.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/relations/mapping.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/i18n_validation.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/marshmallow.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/services/schema/validation.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/default_translations.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime/translations/jinjax_messages.jinja
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.29 → oarepo-runtime-1.5.30}/oarepo_runtime.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|