oarepo-runtime 1.5.29__tar.gz → 1.5.31__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. {oarepo-runtime-1.5.29/oarepo_runtime.egg-info → oarepo_runtime-1.5.31}/PKG-INFO +1 -1
  2. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/custom_fields/mappings.py +6 -3
  3. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/results.py +18 -2
  4. oarepo_runtime-1.5.31/oarepo_runtime/services/schema/oneofschema.py +192 -0
  5. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/polymorphic.py +2 -2
  6. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31/oarepo_runtime.egg-info}/PKG-INFO +1 -1
  7. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime.egg-info/SOURCES.txt +1 -0
  8. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/setup.cfg +1 -1
  9. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/LICENSE +0 -0
  10. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/MANIFEST.in +0 -0
  11. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/README.md +0 -0
  12. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/__init__.py +0 -0
  13. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/__init__.py +0 -0
  14. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/assets.py +0 -0
  15. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/base.py +0 -0
  16. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/cf.py +0 -0
  17. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/check.py +0 -0
  18. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/configuration.py +0 -0
  19. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/fixtures.py +0 -0
  20. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/index.py +0 -0
  21. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/cli/validate.py +0 -0
  22. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/__init__.py +0 -0
  23. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/asynchronous.py +0 -0
  24. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/catalogue.py +0 -0
  25. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/datastreams.py +0 -0
  26. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/errors.py +0 -0
  27. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/ext.py +0 -0
  28. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/fixtures.py +0 -0
  29. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/json.py +0 -0
  30. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
  31. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
  32. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/excel.py +0 -0
  33. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/json.py +0 -0
  34. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/service.py +0 -0
  35. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
  36. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
  37. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/synchronous.py +0 -0
  38. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/transformers.py +0 -0
  39. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/types.py +0 -0
  40. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/utils.py +0 -0
  41. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
  42. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
  43. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
  44. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/service.py +0 -0
  45. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/utils.py +0 -0
  46. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
  47. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
  48. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/ext.py +0 -0
  49. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/ext_config.py +0 -0
  50. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/i18n/__init__.py +0 -0
  51. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/info/__init__.py +0 -0
  52. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/info/views.py +0 -0
  53. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/profile.py +0 -0
  54. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/proxies.py +0 -0
  55. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/__init__.py +0 -0
  56. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/dumpers/__init__.py +0 -0
  57. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
  58. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
  59. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
  60. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
  61. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/owners/__init__.py +0 -0
  62. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/owners/registry.py +0 -0
  63. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/relations/__init__.py +0 -0
  64. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/relations/base.py +0 -0
  65. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/relations/internal.py +0 -0
  66. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/relations/lookup.py +0 -0
  67. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/relations/pid_relation.py +0 -0
  68. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/__init__.py +0 -0
  69. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
  70. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
  71. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/icu.py +0 -0
  72. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/mapping.py +0 -0
  73. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/owner.py +0 -0
  74. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/record_status.py +0 -0
  75. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/selectors.py +0 -0
  76. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
  77. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/resources/__init__.py +0 -0
  78. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/resources/file_resource.py +0 -0
  79. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
  80. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/__init__.py +0 -0
  81. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/components.py +0 -0
  82. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/config/__init__.py +0 -0
  83. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/config/permissions_presets.py +0 -0
  84. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/config/service.py +0 -0
  85. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
  86. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/expansions/__init__.py +0 -0
  87. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
  88. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/expansions/service.py +0 -0
  89. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/__init__.py +0 -0
  90. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/base.py +0 -0
  91. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/date.py +0 -0
  92. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/enum.py +0 -0
  93. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
  94. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/max_facet.py +0 -0
  95. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/nested_facet.py +0 -0
  96. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/facets/params.py +0 -0
  97. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/files/__init__.py +0 -0
  98. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/files/service.py +0 -0
  99. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/generators.py +0 -0
  100. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/relations/__init__.py +0 -0
  101. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/relations/components.py +0 -0
  102. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/relations/errors.py +0 -0
  103. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/relations/mapping.py +0 -0
  104. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/__init__.py +0 -0
  105. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/cf.py +0 -0
  106. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/i18n.py +0 -0
  107. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
  108. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
  109. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/marshmallow.py +0 -0
  110. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/ui.py +0 -0
  111. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/schema/validation.py +0 -0
  112. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/services/search.py +0 -0
  113. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
  114. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
  115. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/default_translations.py +0 -0
  116. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
  117. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
  118. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
  119. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/translations/messages.pot +0 -0
  120. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/uow.py +0 -0
  121. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/utils/__init__.py +0 -0
  122. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/utils/functools.py +0 -0
  123. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime/utils/path.py +0 -0
  124. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
  125. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime.egg-info/entry_points.txt +0 -0
  126. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime.egg-info/requires.txt +0 -0
  127. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/oarepo_runtime.egg-info/top_level.txt +0 -0
  128. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/pyproject.toml +0 -0
  129. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/setup.py +0 -0
  130. {oarepo-runtime-1.5.29 → oarepo_runtime-1.5.31}/tests/pkg_data/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.29
3
+ Version: 1.5.31
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -68,11 +68,14 @@ def prepare_cf_indices():
68
68
  service: RecordService
69
69
  for service in current_service_registry._services.values():
70
70
  config: RecordServiceConfig = service.config
71
- prepare_cf_index(config)
71
+ record_class = getattr(config, "record_cls", None)
72
+ if record_class:
73
+ prepare_cf_index(record_class, config)
74
+ parent_class = getattr(record_class, "parent_record_cls", None)
75
+ prepare_cf_index(parent_class, config)
72
76
 
73
77
 
74
- def prepare_cf_index(config: RecordServiceConfig):
75
- record_class = getattr(config, "record_cls", None)
78
+ def prepare_cf_index(record_class, config):
76
79
  if not record_class:
77
80
  return
78
81
 
@@ -6,6 +6,11 @@ from invenio_records_resources.services.records.results import (
6
6
  )
7
7
 
8
8
 
9
+ class ResultsComponent:
10
+ def update_data(self, identity, record, projection, expand):
11
+ raise NotImplementedError
12
+
13
+
9
14
  class RecordItem(BaseRecordItem):
10
15
  """Single record result."""
11
16
 
@@ -17,7 +22,12 @@ class RecordItem(BaseRecordItem):
17
22
  return self._data
18
23
  _data = super().data
19
24
  for c in self.components:
20
- c.update_data(self._identity, self._record, _data)
25
+ c.update_data(
26
+ identity=self._identity,
27
+ record=self._record,
28
+ projection=_data,
29
+ expand=self._expand,
30
+ )
21
31
  return _data
22
32
 
23
33
 
@@ -47,6 +57,12 @@ class RecordList(BaseRecordList):
47
57
  projection["links"] = self._links_item_tpl.expand(
48
58
  self._identity, record
49
59
  )
60
+ # todo optimization viz FieldsResolver
50
61
  for c in self.components:
51
- c.update_data(self._identity, record, projection)
62
+ c.update_data(
63
+ identity=self._identity,
64
+ record=self._record,
65
+ projection=projection,
66
+ expand=self._expand,
67
+ )
52
68
  yield projection
@@ -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 {}
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.29
3
+ Version: 1.5.31
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -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
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = oarepo-runtime
3
- version = 1.5.29
3
+ version = 1.5.31
4
4
  description = A set of runtime extensions of Invenio repository
5
5
  authors = Alzbeta Pokorna
6
6
  readme = README.md
File without changes