oarepo-runtime 1.5.66__py3-none-any.whl → 1.5.68__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,6 @@ def check_db_connection():
16
16
 
17
17
  def has_database_connection():
18
18
  try:
19
- db.session.begin()
20
19
  db.session.execute("select * from alembic_version").scalar()
21
20
  return True
22
21
  except:
@@ -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:
@@ -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.66
3
+ Version: 1.5.68
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -42,8 +42,8 @@ oarepo_runtime/datastreams/writers/validation_errors.py,sha256=wOCXdniR6so_4Expd
42
42
  oarepo_runtime/datastreams/writers/yaml.py,sha256=XchUJHQ58E2Mfgs8elImXbL38jFtI8Hfoye6yaR0gKI,1482
43
43
  oarepo_runtime/i18n/__init__.py,sha256=h0knW_HwiyIt5TBHfdGqN7_BBYfpz1Fw6zhVy0C28fM,111
44
44
  oarepo_runtime/info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- oarepo_runtime/info/check.py,sha256=WWAqMIBmc7veQKflRBe97_PoDsvJ1DrDrJuTDNeGDaI,3076
46
- oarepo_runtime/info/views.py,sha256=UkLGzf6Vo8GLutfzJW3IAyq9sdPexICUFAvz903autY,11829
45
+ oarepo_runtime/info/check.py,sha256=6O5Wjsdorx4eqiBiPU3z33XhCiwPTO_FGkzMDK7UH6I,3049
46
+ oarepo_runtime/info/views.py,sha256=q9PG46aM-1ihaVxJGjfcD5HvJWanM28gMefao8FIQk4,12440
47
47
  oarepo_runtime/records/__init__.py,sha256=3vzRsAPxl4d5QOnGyls-vUg4E6PunmR4ACObtacMAIQ,1038
48
48
  oarepo_runtime/records/dumpers/__init__.py,sha256=OmzNhLdMNKibmCksnj9eTX9xPBG30dziiK3j3bAAp3k,233
49
49
  oarepo_runtime/records/dumpers/edtf_interval.py,sha256=YCShZAoqBQYaxVilEVotS-jXZsxxoXO67yu2urhkaMA,1198
@@ -68,6 +68,7 @@ oarepo_runtime/records/systemfields/selectors.py,sha256=Q9jE1smSN3heT2LIpK_jB6bI
68
68
  oarepo_runtime/records/systemfields/synthetic.py,sha256=UustvhzcDGuaNZLDeHbWwshoxQR-qRIuHDCct5RXmrI,4287
69
69
  oarepo_runtime/resources/__init__.py,sha256=v8BGrOTu_FjKzd0eozV7Q4GoGxyfybsL2cI-tbP5Pys,185
70
70
  oarepo_runtime/resources/file_resource.py,sha256=Ta3bFce7l0xwqkkOMOEu9mxbB8BbKj5HUHRHmidhnl8,414
71
+ oarepo_runtime/resources/json_serializer.py,sha256=82_-xQEtxKaPakv8R1oBAFbGnxskF_Ve4tcfcy4PetI,963
71
72
  oarepo_runtime/resources/localized_ui_json_serializer.py,sha256=3V9cJaG_e1PMXKVX_wKfBp1LmbeForwHyBNYdyha4uQ,1878
72
73
  oarepo_runtime/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
74
  oarepo_runtime/services/components.py,sha256=zaZroTqzV5fz8yVAtRFLbbkTT9iD_dx9jFYANm3JIfI,3285
@@ -106,6 +107,7 @@ oarepo_runtime/services/schema/i18n.py,sha256=NACu0SqXWuuwKVpBZdz4K8tVfBaCEI9Ypc
106
107
  oarepo_runtime/services/schema/i18n_ui.py,sha256=MnEDW0gcZPvEODbJ6XzldxNCJ2suhfmdHQ4wkcAG6zA,2179
107
108
  oarepo_runtime/services/schema/i18n_validation.py,sha256=fyMTi2Rw-KiHv7c7HN61zGxRVa9sAjAEEkAL5wUyKNo,236
108
109
  oarepo_runtime/services/schema/marshmallow.py,sha256=LmcSxvbZ9jIhkNHCqqxt1SA2UNijoDmIzqli1MkoTrE,1153
110
+ oarepo_runtime/services/schema/marshmallow_to_json_schema.py,sha256=VYLnVWHOoaxWCD_gqJO8-8u1SbaPEFBjDZ5HGgGr0Ow,2027
109
111
  oarepo_runtime/services/schema/oneofschema.py,sha256=GnWH4Or_G5M0NgSmCoqMI6PBrJg5AC9RHrcB5QDKRq0,6661
110
112
  oarepo_runtime/services/schema/polymorphic.py,sha256=bAbUoTIeDBiJPYPhpLEKKZekEdkHlpqkmNxk1hN3PDw,564
111
113
  oarepo_runtime/services/schema/ui.py,sha256=xQgW-zLyZoHldGw47uVtXQj-5LexVNKTholyq4MiBZo,3777
@@ -120,10 +122,13 @@ oarepo_runtime/translations/en/LC_MESSAGES/messages.po,sha256=rZ2PGvkcJbmuwrWeFX
120
122
  oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
123
  oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
122
124
  oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
125
+ tests/marshmallow_to_json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ tests/marshmallow_to_json/test_datacite_ui_schema.py,sha256=82iLj8nW45lZOUewpWbLX3mpSkpa9lxo-vK-Qtv_1bU,48552
127
+ tests/marshmallow_to_json/test_simple_schema.py,sha256=izZN9p0v6kovtSZ6AdxBYmK_c6ZOti2_z_wPT_zXIr0,1500
123
128
  tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- oarepo_runtime-1.5.66.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
125
- oarepo_runtime-1.5.66.dist-info/METADATA,sha256=aWxTnz-qJ8ns7WPbokWgJEHnlw-CcUnlx1VScNmoBOE,4720
126
- oarepo_runtime-1.5.66.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
127
- oarepo_runtime-1.5.66.dist-info/entry_points.txt,sha256=0cschM0RHc6UJ1uudhu4EP0hrVStPGpgMO-XEDGRtY4,430
128
- oarepo_runtime-1.5.66.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
129
- oarepo_runtime-1.5.66.dist-info/RECORD,,
129
+ oarepo_runtime-1.5.68.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
130
+ oarepo_runtime-1.5.68.dist-info/METADATA,sha256=wGz7WMd-5Hw2XeQV-s5bEJyosJ9wbO-eKW0GdetW_uY,4720
131
+ oarepo_runtime-1.5.68.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
132
+ oarepo_runtime-1.5.68.dist-info/entry_points.txt,sha256=0cschM0RHc6UJ1uudhu4EP0hrVStPGpgMO-XEDGRtY4,430
133
+ oarepo_runtime-1.5.68.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
134
+ oarepo_runtime-1.5.68.dist-info/RECORD,,
File without changes