oarepo-runtime 1.5.66__tar.gz → 1.5.67__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {oarepo_runtime-1.5.66/oarepo_runtime.egg-info → oarepo_runtime-1.5.67}/PKG-INFO +1 -1
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/info/views.py +16 -4
- oarepo_runtime-1.5.67/oarepo_runtime/resources/json_serializer.py +27 -0
- oarepo_runtime-1.5.67/oarepo_runtime/services/schema/marshmallow_to_json_schema.py +72 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67/oarepo_runtime.egg-info}/PKG-INFO +1 -1
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/SOURCES.txt +5 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/setup.cfg +1 -1
- oarepo_runtime-1.5.67/tests/marshmallow_to_json/test_datacite_ui_schema.py +1410 -0
- oarepo_runtime-1.5.67/tests/marshmallow_to_json/test_simple_schema.py +52 -0
- oarepo_runtime-1.5.67/tests/pkg_data/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/LICENSE +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/MANIFEST.in +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/README.md +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/assets.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/base.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/cf.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/check.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/configuration.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/fixtures.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/index.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/cli/validate.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/asynchronous.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/catalogue.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/datastreams.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/errors.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/ext.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/fixtures.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/json.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/excel.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/json.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/synchronous.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/transformers.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/types.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/utils.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/utils.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/ext.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/ext_config.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/i18n/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/info/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/info/check.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/profile.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/proxies.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/owners/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/owners/registry.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/base.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/internal.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/lookup.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/relations/pid_relation.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/icu.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/mapping.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/owner.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/record_status.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/selectors.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/file_resource.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/components.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/permissions_presets.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/config/service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/expansions/service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/base.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/date.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/enum.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/max_facet.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/nested_facet.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/params.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/facets/year_histogram.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/components.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/files/service.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/generators.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/permissions/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/permissions/generators.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/components.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/errors.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/relations/mapping.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/results.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/cf.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/marshmallow.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/oneofschema.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/polymorphic.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/ui.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/schema/validation.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/services/search.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/tasks.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/default_translations.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/translations/messages.pot +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/uow.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/__init__.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/functools.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime/utils/path.py +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/entry_points.txt +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/requires.txt +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/oarepo_runtime.egg-info/top_level.txt +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/pyproject.toml +0 -0
- {oarepo_runtime-1.5.66 → oarepo_runtime-1.5.67}/setup.py +0 -0
- {oarepo_runtime-1.5.66/tests/pkg_data → oarepo_runtime-1.5.67/tests/marshmallow_to_json}/__init__.py +0 -0
@@ -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
|
-
"
|
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
|
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
|
-
|
281
|
-
|
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:
|
@@ -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"}
|
@@ -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
|