oarepo-runtime 1.5.111__py3-none-any.whl → 1.5.113__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.
@@ -4,9 +4,10 @@ from .base import (
4
4
  Relation,
5
5
  RelationResult,
6
6
  RelationsField,
7
+ UnstrictRelationResult
7
8
  )
8
9
  from .internal import InternalRelation
9
- from .pid_relation import PIDRelation
10
+ from .pid_relation import PIDRelation, UnstrictPIDRelation
10
11
 
11
12
  __all__ = (
12
13
  "Relation",
@@ -16,4 +17,6 @@ __all__ = (
16
17
  "RelationsField",
17
18
  "InternalRelation",
18
19
  "PIDRelation",
20
+ "UnstrictPIDRelation",
21
+ "UnstrictRelationResult"
19
22
  )
@@ -173,6 +173,32 @@ class RelationResult:
173
173
 
174
174
  def resolve(self, id_):
175
175
  raise NotImplementedError("Please implement this method in your subclass")
176
+ class UnstrictRelationResult(RelationResult):
177
+
178
+ def _resolve_lookup_result(self, relation):
179
+ if not isinstance(relation.value, dict):
180
+ raise InvalidRelationValue(
181
+ f"Value at path {relation.path} must be dict, found {relation.value}"
182
+ )
183
+ relation_id = self._lookup_id(relation)
184
+ resolved_object = self.resolve(relation_id, relation.value)
185
+ if not resolved_object:
186
+ raise InvalidRelationValue(f"Could not resolve relation id {relation_id}.")
187
+ return resolved_object
188
+
189
+ def _dereference_one(self, relation: LookupResult):
190
+ """Dereference a single object into a dict."""
191
+ if not self._needs_update_relation_value(relation):
192
+ return
193
+
194
+ data = relation.value
195
+ obj = self._resolve_lookup_result(relation)
196
+ if type(obj) is not dict:
197
+ self._get_dereferenced_value(data, obj, relation)
198
+
199
+ return data
200
+
201
+
176
202
 
177
203
 
178
204
  class Relation:
@@ -1,12 +1,13 @@
1
1
  from invenio_db import db
2
2
 
3
3
  from oarepo_runtime.services.relations.errors import InvalidRelationError
4
+ from sqlalchemy.exc import NoResultFound
4
5
 
5
- from .base import Relation, RelationResult
6
+ from .base import Relation, RelationResult, UnstrictRelationResult
6
7
  from .lookup import LookupResult
7
8
 
8
9
  class PIDRelationResult(RelationResult):
9
- def resolve(self, id_):
10
+ def resolve(self, id_, data = None):
10
11
  """Resolve the value using the record class."""
11
12
  # TODO: handle permissions here !!!!!!
12
13
  try:
@@ -65,6 +66,15 @@ class PIDRelationResult(RelationResult):
65
66
  def _add_version_info(self, data, relation: LookupResult, resolved_object):
66
67
  data["@v"] = f"{resolved_object.id}::{resolved_object.revision_id}"
67
68
 
69
+ class UnstrictPIDRelationResult(PIDRelationResult, UnstrictRelationResult):
70
+
71
+ def resolve(self, id_, data):
72
+ try:
73
+ return super().resolve(id_, data)
74
+ except InvalidRelationError as e:
75
+ if isinstance(e.__cause__, NoResultFound):
76
+ return data
77
+ raise
68
78
 
69
79
  class PIDRelation(Relation):
70
80
  result_cls = PIDRelationResult
@@ -73,6 +83,12 @@ class PIDRelation(Relation):
73
83
  super().__init__(key=key, **kwargs)
74
84
  self.pid_field = pid_field
75
85
 
86
+ class UnstrictPIDRelation(Relation):
87
+ result_cls = UnstrictPIDRelationResult
88
+
89
+ def __init__(self, key=None, pid_field=None, **kwargs):
90
+ super().__init__(key=key, **kwargs)
91
+ self.pid_field = pid_field
76
92
 
77
93
  class MetadataRelationResult(PIDRelationResult):
78
94
  def _dereference_one(self, relation: LookupResult):
@@ -1,7 +1,7 @@
1
1
  import marshmallow as ma
2
2
  from oarepo_runtime.services.schema.marshmallow import DictOnlySchema
3
3
  from oarepo_vocabularies.services.ui_schema import VocabularyI18nStrUIField
4
-
4
+ from idutils import to_url
5
5
 
6
6
  class RDMIdentifierWithSchemaUISchema(ma.Schema):
7
7
  scheme = ma.fields.String(
@@ -9,6 +9,16 @@ class RDMIdentifierWithSchemaUISchema(ma.Schema):
9
9
  )
10
10
  identifier = ma.fields.String(required=True)
11
11
 
12
+ @ma.post_dump
13
+ def add_url(self, value, **kwargs):
14
+ if "identifier" in value and "scheme" in value:
15
+ url = to_url(
16
+ value["identifier"], value["scheme"].lower(), url_scheme="https"
17
+ )
18
+ if url:
19
+ value["url"] = url
20
+ return value
21
+
12
22
 
13
23
  class RDMAwardIdentifierUISchema(ma.Schema):
14
24
  identifier = ma.fields.String()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: oarepo-runtime
3
- Version: 1.5.111
3
+ Version: 1.5.113
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -62,11 +62,11 @@ oarepo_runtime/records/mappings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
62
62
  oarepo_runtime/records/mappings/rdm_parent_mapping.json,sha256=9yRjlGs8-TZZiKN9MtAzNhRzYq9AEJFY9E80FN0wYoM,647
63
63
  oarepo_runtime/records/owners/__init__.py,sha256=R4hudCBqLRRzgCnkEjXIL7hSp068z-s6YOwYSkWyuaw,93
64
64
  oarepo_runtime/records/owners/registry.py,sha256=fYgBuW5nBKn6pyz2OBgfNlynk64_yhQ9J7FzPk8QU1U,795
65
- oarepo_runtime/records/relations/__init__.py,sha256=bDAgxl_LdKsqpGG3qluxAkQnn5u2ItJngnHQKkqzlkE,373
66
- oarepo_runtime/records/relations/base.py,sha256=XQpRt6-MfIKIClZ0IoGJr0GGl2Ru3RcqMoowOxrFG_E,8981
65
+ oarepo_runtime/records/relations/__init__.py,sha256=Zn7JeQrd5f1doWl5IpbNSpO8m8hm1m-oljAW-7WHn-k,477
66
+ oarepo_runtime/records/relations/base.py,sha256=gTXvyxdkKZ_khdoqvShE2mIbPDU91Bf9beTxHwQtyFk,9925
67
67
  oarepo_runtime/records/relations/internal.py,sha256=OTp8iJqyl80sWDk0Q0AK42l6UsxZDABspVU_GwWza9o,1556
68
68
  oarepo_runtime/records/relations/lookup.py,sha256=wi3jPfOedazOmhOMrgu50PUETc1jfSdpmjK0wvOFsEM,848
69
- oarepo_runtime/records/relations/pid_relation.py,sha256=G8ahoiQgp-PFPjQq0Fqu81z5YM7YKs8e2Hd_xqr3G8U,3290
69
+ oarepo_runtime/records/relations/pid_relation.py,sha256=eojw5uIo5zXmJGge_bj6Wj2njCRY5S4o4B_h_HFyaDY,3901
70
70
  oarepo_runtime/records/systemfields/__init__.py,sha256=LL1R64RUakA_4r0IkTq9MtwqD5eV-AQaj5u96zkWa74,533
71
71
  oarepo_runtime/records/systemfields/featured_file.py,sha256=MbSaYR130_o5S9gEOblnChq-PVK4xGPGpSCrzwG3cwc,1720
72
72
  oarepo_runtime/records/systemfields/has_draftcheck.py,sha256=4JkMEefPLpqtPtlTgK3UT0KzTRgyw5_Qtkss2qcz5xk,1643
@@ -131,7 +131,7 @@ oarepo_runtime/services/schema/marshmallow_to_json_schema.py,sha256=VYLnVWHOoaxW
131
131
  oarepo_runtime/services/schema/oneofschema.py,sha256=GnWH4Or_G5M0NgSmCoqMI6PBrJg5AC9RHrcB5QDKRq0,6661
132
132
  oarepo_runtime/services/schema/polymorphic.py,sha256=bAbUoTIeDBiJPYPhpLEKKZekEdkHlpqkmNxk1hN3PDw,564
133
133
  oarepo_runtime/services/schema/rdm.py,sha256=dBy1KCJ_XYAN_cffoRqLfQVEdZOKwmSpqGdEP4OL64k,1280
134
- oarepo_runtime/services/schema/rdm_ui.py,sha256=KO7UGrejhaFa65CdcQ96K7jpQSdj_35CYa2pwpgxf1s,3051
134
+ oarepo_runtime/services/schema/rdm_ui.py,sha256=x1cWvGbmmB1GNKu4Hyl65tc_j5TiKsyZm8Y2JQyHEB4,3389
135
135
  oarepo_runtime/services/schema/ui.py,sha256=hHbj1S-DW1WqgYX31f6UjarY4wrE-qFLpH3oUhvGLyE,6192
136
136
  oarepo_runtime/services/schema/validation.py,sha256=VFOKSxQLHwFb7bW8BJAFXWe_iTAZFOfqOnb2Ko_Yxxc,2085
137
137
  oarepo_runtime/translations/default_translations.py,sha256=060GBlA1ghWxfeumo6NqxCCZDb-6OezOuF6pr-_GEOQ,104
@@ -147,9 +147,9 @@ tests/marshmallow_to_json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
147
147
  tests/marshmallow_to_json/test_datacite_ui_schema.py,sha256=82iLj8nW45lZOUewpWbLX3mpSkpa9lxo-vK-Qtv_1bU,48552
148
148
  tests/marshmallow_to_json/test_simple_schema.py,sha256=izZN9p0v6kovtSZ6AdxBYmK_c6ZOti2_z_wPT_zXIr0,1500
149
149
  tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
- oarepo_runtime-1.5.111.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
151
- oarepo_runtime-1.5.111.dist-info/METADATA,sha256=siwU9jj_7KHqtqhGWSUur7Z0LEKf3_h4PXd-3xr0J58,4721
152
- oarepo_runtime-1.5.111.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
153
- oarepo_runtime-1.5.111.dist-info/entry_points.txt,sha256=k7O5LZUOGsVeSpB7ulU0txBUNp1CVQG7Q7TJIVTPbzU,491
154
- oarepo_runtime-1.5.111.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
155
- oarepo_runtime-1.5.111.dist-info/RECORD,,
150
+ oarepo_runtime-1.5.113.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
151
+ oarepo_runtime-1.5.113.dist-info/METADATA,sha256=UGtsZ8VPgPRyX2EXFUEZEEQV52jL8XeHHXWWhLdbyL8,4721
152
+ oarepo_runtime-1.5.113.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
153
+ oarepo_runtime-1.5.113.dist-info/entry_points.txt,sha256=k7O5LZUOGsVeSpB7ulU0txBUNp1CVQG7Q7TJIVTPbzU,491
154
+ oarepo_runtime-1.5.113.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
155
+ oarepo_runtime-1.5.113.dist-info/RECORD,,