oarepo-runtime 1.5.65__tar.gz → 1.5.67__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. {oarepo_runtime-1.5.65/oarepo_runtime.egg-info → oarepo_runtime-1.5.67}/PKG-INFO +1 -1
  2. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/info/views.py +16 -4
  3. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/selectors.py +11 -17
  4. oarepo_runtime-1.5.67/oarepo_runtime/resources/json_serializer.py +27 -0
  5. oarepo_runtime-1.5.67/oarepo_runtime/services/schema/marshmallow_to_json_schema.py +72 -0
  6. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67/oarepo_runtime.egg-info}/PKG-INFO +1 -1
  7. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/SOURCES.txt +5 -0
  8. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/setup.cfg +1 -1
  9. oarepo_runtime-1.5.67/tests/marshmallow_to_json/test_datacite_ui_schema.py +1410 -0
  10. oarepo_runtime-1.5.67/tests/marshmallow_to_json/test_simple_schema.py +52 -0
  11. oarepo_runtime-1.5.67/tests/pkg_data/__init__.py +0 -0
  12. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/LICENSE +0 -0
  13. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/MANIFEST.in +0 -0
  14. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/README.md +0 -0
  15. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/__init__.py +0 -0
  16. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/__init__.py +0 -0
  17. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/assets.py +0 -0
  18. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/base.py +0 -0
  19. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/cf.py +0 -0
  20. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/check.py +0 -0
  21. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/configuration.py +0 -0
  22. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/fixtures.py +0 -0
  23. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/index.py +0 -0
  24. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/validate.py +0 -0
  25. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/__init__.py +0 -0
  26. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/asynchronous.py +0 -0
  27. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/catalogue.py +0 -0
  28. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/datastreams.py +0 -0
  29. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/errors.py +0 -0
  30. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/ext.py +0 -0
  31. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/fixtures.py +0 -0
  32. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/json.py +0 -0
  33. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
  34. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
  35. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/excel.py +0 -0
  36. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/json.py +0 -0
  37. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/service.py +0 -0
  38. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
  39. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
  40. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/synchronous.py +0 -0
  41. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/transformers.py +0 -0
  42. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/types.py +0 -0
  43. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/utils.py +0 -0
  44. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
  45. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
  46. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
  47. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/service.py +0 -0
  48. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/utils.py +0 -0
  49. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
  50. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
  51. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/ext.py +0 -0
  52. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/ext_config.py +0 -0
  53. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/i18n/__init__.py +0 -0
  54. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/info/__init__.py +0 -0
  55. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/info/check.py +0 -0
  56. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/profile.py +0 -0
  57. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/proxies.py +0 -0
  58. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/__init__.py +0 -0
  59. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/__init__.py +0 -0
  60. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
  61. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
  62. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
  63. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
  64. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/owners/__init__.py +0 -0
  65. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/owners/registry.py +0 -0
  66. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/__init__.py +0 -0
  67. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/base.py +0 -0
  68. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/internal.py +0 -0
  69. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/lookup.py +0 -0
  70. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/pid_relation.py +0 -0
  71. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/__init__.py +0 -0
  72. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
  73. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
  74. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/icu.py +0 -0
  75. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/mapping.py +0 -0
  76. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/owner.py +0 -0
  77. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/record_status.py +0 -0
  78. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
  79. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/__init__.py +0 -0
  80. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/file_resource.py +0 -0
  81. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
  82. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/__init__.py +0 -0
  83. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/components.py +0 -0
  84. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/__init__.py +0 -0
  85. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/permissions_presets.py +0 -0
  86. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/service.py +0 -0
  87. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
  88. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
  89. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/__init__.py +0 -0
  90. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
  91. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/service.py +0 -0
  92. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/__init__.py +0 -0
  93. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/base.py +0 -0
  94. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/date.py +0 -0
  95. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/enum.py +0 -0
  96. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
  97. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/max_facet.py +0 -0
  98. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/nested_facet.py +0 -0
  99. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/params.py +0 -0
  100. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/year_histogram.py +0 -0
  101. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/__init__.py +0 -0
  102. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/components.py +0 -0
  103. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/service.py +0 -0
  104. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/generators.py +0 -0
  105. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/permissions/__init__.py +0 -0
  106. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/permissions/generators.py +0 -0
  107. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/__init__.py +0 -0
  108. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/components.py +0 -0
  109. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/errors.py +0 -0
  110. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/mapping.py +0 -0
  111. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/results.py +0 -0
  112. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/__init__.py +0 -0
  113. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/cf.py +0 -0
  114. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n.py +0 -0
  115. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
  116. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
  117. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/marshmallow.py +0 -0
  118. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/oneofschema.py +0 -0
  119. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/polymorphic.py +0 -0
  120. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/ui.py +0 -0
  121. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/validation.py +0 -0
  122. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/services/search.py +0 -0
  123. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/tasks.py +0 -0
  124. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
  125. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
  126. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/default_translations.py +0 -0
  127. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
  128. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
  129. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
  130. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/messages.pot +0 -0
  131. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/uow.py +0 -0
  132. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/__init__.py +0 -0
  133. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/functools.py +0 -0
  134. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/path.py +0 -0
  135. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
  136. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/entry_points.txt +0 -0
  137. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/requires.txt +0 -0
  138. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/top_level.txt +0 -0
  139. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/pyproject.toml +0 -0
  140. {oarepo_runtime-1.5.65 → oarepo_runtime-1.5.67}/setup.py +0 -0
  141. {oarepo_runtime-1.5.65/tests/pkg_data → oarepo_runtime-1.5.67/tests/marshmallow_to_json}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.65
3
+ Version: 1.5.67
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -105,6 +105,7 @@ class InfoResource(Resource):
105
105
  if model_data.get("type") != "model":
106
106
  continue
107
107
 
108
+ resource_config_class = self._get_resource_config_class(model_data)
108
109
  service = self._get_service(model_data)
109
110
  service_class = self._get_service_class(model_data)
110
111
  if not service or type(service) != service_class:
@@ -143,7 +144,7 @@ class InfoResource(Resource):
143
144
  "links": links,
144
145
  # TODO: we also need to get previous schema versions here if we support
145
146
  # multiple version of the same schema at the same time
146
- "schemas": self._get_model_schemas(service),
147
+ "accept": self._get_model_accept_types(service, resource_config_class),
147
148
  }
148
149
  )
149
150
  self.call_components("model", data=data)
@@ -273,16 +274,27 @@ class InfoResource(Resource):
273
274
  logger.exception("Failed to get model model endpoint")
274
275
  return None
275
276
 
276
- def _get_model_schemas(self, service):
277
+ def _get_model_accept_types(self, service, resource_config):
277
278
  try:
278
279
  record_cls = service.config.record_cls
279
280
  schema = getattr(record_cls, "schema", None)
280
- if schema is not None:
281
- return {"application/json": schema.value}
281
+ accept_types = []
282
+ for accept_type, handler in resource_config.response_handlers.items():
283
+ curr_item = {'accept': accept_type}
284
+ if handler.serializer is not None and hasattr(handler.serializer, "info"):
285
+ curr_item.update(handler.serializer.info(service))
286
+ accept_types.append(curr_item)
287
+
288
+ return accept_types
282
289
  except: # NOSONAR noqa
283
290
  logger.exception("Failed to get model schemas")
284
291
  return {}
285
292
 
293
+
294
+ def _get_resource_config_class(self, model_data):
295
+ model_class = model_data['resource-config']['class']
296
+ return obj_or_import_string(model_class)()
297
+
286
298
  def _get_service(self, model_data):
287
299
  service_id = model_data["service-config"]["service-id"]
288
300
  try:
@@ -1,7 +1,10 @@
1
- from typing import Any, Callable, List
1
+ import dataclasses
2
+ from typing import Any, Callable, List, Protocol, Tuple
2
3
 
4
+ from oarepo_runtime.records.relations.lookup import lookup_key
3
5
 
4
- class Selector:
6
+
7
+ class Selector(Protocol):
5
8
  def select(self, record) -> List[Any]:
6
9
  return []
7
10
 
@@ -25,6 +28,7 @@ class FirstItemSelector(PathSelector):
25
28
  return []
26
29
 
27
30
 
31
+ @dataclasses.dataclass
28
32
  class FilteredSelector(Selector):
29
33
  """
30
34
  Selector which filters output of another selector
@@ -43,17 +47,9 @@ class FilteredSelector(Selector):
43
47
  }
44
48
  }
45
49
  """
46
-
47
- def __init__(
48
- self,
49
- selector: Selector,
50
- filter: Callable[[Any], bool],
51
- projection: Callable[[Any], Any] | str = None,
52
- ):
53
-
54
- self.selector = selector
55
- self.filter = filter
56
- self.projection = projection
50
+ selector: Selector
51
+ filter: Callable[[Any], bool]
52
+ projection: Callable[[Any], Any] | str = None
57
53
 
58
54
  def select(self, record):
59
55
  selected = self.selector.select(record)
@@ -62,10 +58,7 @@ class FilteredSelector(Selector):
62
58
  ret = []
63
59
  for select_element in selected:
64
60
  if isinstance(self.projection, str):
65
- if isinstance(select_element, dict) and self.projection in select_element:
66
- result = select_element[self.projection]
67
- else:
68
- result = []
61
+ result = [x.value for x in lookup_key(select_element, self.projection)]
69
62
  else:
70
63
  result = self.projection(select_element)
71
64
  if isinstance(result, list):
@@ -77,6 +70,7 @@ class FilteredSelector(Selector):
77
70
  return ret
78
71
 
79
72
 
73
+ @dataclasses.dataclass
80
74
  class MultiSelector(Selector):
81
75
  """Selector concatenating outputs of multiple selectors"""
82
76
 
@@ -0,0 +1,27 @@
1
+ from flask import url_for
2
+ from flask_resources import JSONSerializer as FlaskJSONSerializer
3
+ from invenio_records_resources.services import Service
4
+
5
+
6
+ class JSONSerializer(FlaskJSONSerializer):
7
+
8
+ def info(self, service:Service) -> dict:
9
+ ret = {'description': "Invenio RDM JSON Serialization",
10
+ 'name': "JSON Serialization"
11
+ }
12
+
13
+ schema_value = service.config.record_cls.schema.value
14
+ if schema_value:
15
+ ret['schema'] = schema_value
16
+ if schema_value.startswith("local://"):
17
+ schema_value = schema_value.replace("local://", "")
18
+ ret['schema_url'] = url_for(
19
+ "oarepo_runtime_info.schema",
20
+ schema= schema_value,
21
+ _external=True,
22
+ )
23
+ elif schema_value.startwith("http://") or schema_value.startwith("https://"):
24
+ ret['schema_url'] = schema_value
25
+
26
+
27
+ return ret
@@ -0,0 +1,72 @@
1
+ from marshmallow import Schema, fields
2
+ from oarepo_runtime.services.schema.ui import (
3
+ LocalizedEDTFTime,
4
+ LocalizedDateTime,
5
+ LocalizedEDTF,
6
+ LocalizedEDTFInterval,
7
+ LocalizedEDTFTimeInterval,
8
+ LocalizedTime
9
+ )
10
+
11
+ field_type_converters = {
12
+ fields.String : lambda field: {"type" : "string"},
13
+ fields.Integer: lambda field: {"type": "integer"},
14
+ fields.Float: lambda field: {"type": "number"},
15
+ fields.Boolean: lambda field: {"type": "boolean"},
16
+ fields.List: lambda field: {
17
+ "type": "array",
18
+ "items": convert_field_to_json_schema(field.inner)
19
+ },
20
+ fields.Nested: lambda field: {
21
+ "type": "object",
22
+ "properties": marshmallow_to_json_schema(field.schema)["properties"]
23
+ },
24
+ fields.Raw: lambda field: {
25
+ "type": "object",
26
+ 'additionalProperties' : True
27
+ },
28
+ LocalizedEDTFTime: lambda field: {
29
+ "type": "string",
30
+ "format": "date-time",
31
+ },
32
+ LocalizedDateTime: lambda field: {
33
+ "type": "string",
34
+ "format": "date-time",
35
+ },
36
+ LocalizedTime: lambda field: {
37
+ "type": "string",
38
+ "format": "time",
39
+ },
40
+ LocalizedEDTF: lambda field: {
41
+ "type": "string",
42
+ "format": "date",
43
+ },
44
+ LocalizedEDTFInterval: lambda field: {
45
+ "type": "string",
46
+ "format": "date-time",
47
+ },
48
+ LocalizedEDTFTimeInterval: lambda field: {
49
+ "type": "string",
50
+ "format": "date-time",
51
+ }
52
+ }
53
+
54
+ def marshmallow_to_json_schema(schema:Schema) -> dict:
55
+ json_schema = {
56
+ 'type': 'object',
57
+ 'properties': {}
58
+ }
59
+
60
+ for field_name, field in schema.fields.items():
61
+ json_schema["properties"][field_name] = convert_field_to_json_schema(field)
62
+
63
+ return json_schema
64
+
65
+
66
+ def convert_field_to_json_schema(field:fields) -> dict:
67
+ for field_type in type(field).mro():
68
+ if field_type in field_type_converters:
69
+ return field_type_converters[field_type](field)
70
+
71
+ # no converter found, just string
72
+ return {"type":"string"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.65
3
+ Version: 1.5.67
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -80,6 +80,7 @@ oarepo_runtime/records/systemfields/selectors.py
80
80
  oarepo_runtime/records/systemfields/synthetic.py
81
81
  oarepo_runtime/resources/__init__.py
82
82
  oarepo_runtime/resources/file_resource.py
83
+ oarepo_runtime/resources/json_serializer.py
83
84
  oarepo_runtime/resources/localized_ui_json_serializer.py
84
85
  oarepo_runtime/services/__init__.py
85
86
  oarepo_runtime/services/components.py
@@ -118,6 +119,7 @@ oarepo_runtime/services/schema/i18n.py
118
119
  oarepo_runtime/services/schema/i18n_ui.py
119
120
  oarepo_runtime/services/schema/i18n_validation.py
120
121
  oarepo_runtime/services/schema/marshmallow.py
122
+ oarepo_runtime/services/schema/marshmallow_to_json_schema.py
121
123
  oarepo_runtime/services/schema/oneofschema.py
122
124
  oarepo_runtime/services/schema/polymorphic.py
123
125
  oarepo_runtime/services/schema/ui.py
@@ -132,4 +134,7 @@ oarepo_runtime/translations/en/LC_MESSAGES/messages.po
132
134
  oarepo_runtime/utils/__init__.py
133
135
  oarepo_runtime/utils/functools.py
134
136
  oarepo_runtime/utils/path.py
137
+ tests/marshmallow_to_json/__init__.py
138
+ tests/marshmallow_to_json/test_datacite_ui_schema.py
139
+ tests/marshmallow_to_json/test_simple_schema.py
135
140
  tests/pkg_data/__init__.py
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = oarepo-runtime
3
- version = 1.5.65
3
+ version = 1.5.67
4
4
  description = A set of runtime extensions of Invenio repository
5
5
  authors = Alzbeta Pokorna
6
6
  readme = README.md