oarepo-runtime 1.5.131__py3-none-any.whl → 1.5.132__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.
- oarepo_runtime/services/results.py +46 -35
- oarepo_runtime/services/schema/rdm_ui.py +13 -8
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/METADATA +1 -1
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/RECORD +8 -8
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/WHEEL +0 -0
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/licenses/LICENSE +0 -0
- {oarepo_runtime-1.5.131.dist-info → oarepo_runtime-1.5.132.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
|
|
1
|
+
import logging
|
2
|
+
|
1
3
|
from invenio_records_resources.errors import _iter_errors_dict
|
2
4
|
from invenio_records_resources.services.records.results import (
|
3
5
|
RecordItem as BaseRecordItem,
|
@@ -6,6 +8,8 @@ from invenio_records_resources.services.records.results import (
|
|
6
8
|
RecordList as BaseRecordList,
|
7
9
|
)
|
8
10
|
|
11
|
+
log = logging.getLogger(__name__)
|
12
|
+
|
9
13
|
|
10
14
|
class ResultsComponent:
|
11
15
|
def update_data(self, identity, record, projection, expand):
|
@@ -44,14 +48,12 @@ class RecordItem(BaseRecordItem):
|
|
44
48
|
|
45
49
|
|
46
50
|
def postprocess_error_messages(field_path: str, messages: any):
|
47
|
-
"""Postprocess error messages, looking for those that were not correctly processed by marshmallow/invenio.
|
48
|
-
|
49
|
-
"""
|
51
|
+
"""Postprocess error messages, looking for those that were not correctly processed by marshmallow/invenio."""
|
50
52
|
if not isinstance(messages, list):
|
51
53
|
yield {"field": field_path, "messages": messages}
|
52
54
|
else:
|
53
|
-
str_messages = [
|
54
|
-
non_str_messages = [
|
55
|
+
str_messages = [msg for msg in messages if isinstance(msg, str)]
|
56
|
+
non_str_messages = [msg for msg in messages if not isinstance(msg, str)]
|
55
57
|
|
56
58
|
if str_messages:
|
57
59
|
yield {"field": field_path, "messages": str_messages}
|
@@ -65,11 +67,14 @@ def postprocess_errors(errors: list[dict]):
|
|
65
67
|
converted_errors = []
|
66
68
|
for error in errors:
|
67
69
|
if error.get("messages"):
|
68
|
-
converted_errors.extend(
|
70
|
+
converted_errors.extend(
|
71
|
+
postprocess_error_messages(error["field"], error["messages"])
|
72
|
+
)
|
69
73
|
else:
|
70
74
|
converted_errors.append(error)
|
71
75
|
return converted_errors
|
72
76
|
|
77
|
+
|
73
78
|
class RecordList(BaseRecordList):
|
74
79
|
components = []
|
75
80
|
|
@@ -101,37 +106,43 @@ class RecordList(BaseRecordList):
|
|
101
106
|
for hit in self._results:
|
102
107
|
# Load dump
|
103
108
|
hit_dict = hit.to_dict()
|
104
|
-
if hit_dict.get("record_status") == "draft":
|
105
|
-
record = self._service.draft_cls.loads(hit_dict)
|
106
|
-
else:
|
107
|
-
record = self._service.record_cls.loads(hit_dict)
|
108
109
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
record=
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
elif self._links_item_tpl:
|
123
|
-
projection["links"] = self._links_item_tpl.expand(
|
124
|
-
self._identity, record
|
110
|
+
try:
|
111
|
+
# Project the record
|
112
|
+
if hit_dict.get("record_status") == "draft":
|
113
|
+
record = self._service.draft_cls.loads(hit_dict)
|
114
|
+
else:
|
115
|
+
record = self._service.record_cls.loads(hit_dict)
|
116
|
+
|
117
|
+
projection = self._schema.dump(
|
118
|
+
record,
|
119
|
+
context=dict(
|
120
|
+
identity=self._identity,
|
121
|
+
record=record,
|
122
|
+
),
|
125
123
|
)
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
124
|
+
if hasattr(self._service.config, "links_search_item"):
|
125
|
+
links_tpl = self._service.config.search_item_links_template(
|
126
|
+
self._service.config.links_search_item
|
127
|
+
)
|
128
|
+
projection["links"] = links_tpl.expand(self._identity, record)
|
129
|
+
elif self._links_item_tpl:
|
130
|
+
projection["links"] = self._links_item_tpl.expand(
|
131
|
+
self._identity, record
|
132
|
+
)
|
133
|
+
# todo optimization viz FieldsResolver
|
134
|
+
for c in self.components:
|
135
|
+
c.update_data(
|
136
|
+
identity=self._identity,
|
137
|
+
record=record,
|
138
|
+
projection=projection,
|
139
|
+
expand=self._expand,
|
140
|
+
)
|
141
|
+
yield projection
|
142
|
+
except Exception:
|
143
|
+
# ignore record with error, put it to log so that it gets to glitchtip
|
144
|
+
# but don't break the whole search
|
145
|
+
log.exception("Error while dumping record %s", hit_dict)
|
135
146
|
|
136
147
|
|
137
148
|
class ArrayRecordItem(RecordItem):
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import marshmallow as ma
|
2
|
-
from oarepo_runtime.services.schema.marshmallow import DictOnlySchema
|
3
|
-
from oarepo_vocabularies.services.ui_schema import VocabularyI18nStrUIField
|
4
2
|
from idutils import to_url
|
3
|
+
from oarepo_vocabularies.services.ui_schema import VocabularyI18nStrUIField
|
4
|
+
|
5
|
+
from oarepo_runtime.services.schema.marshmallow import DictOnlySchema
|
5
6
|
|
6
7
|
|
7
8
|
class RDMIdentifierWithSchemaUISchema(ma.Schema):
|
@@ -12,12 +13,16 @@ class RDMIdentifierWithSchemaUISchema(ma.Schema):
|
|
12
13
|
|
13
14
|
@ma.post_dump
|
14
15
|
def add_url(self, value, **kwargs):
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
try:
|
17
|
+
# ignore errors here
|
18
|
+
if "identifier" in value and "scheme" in value:
|
19
|
+
url = to_url(
|
20
|
+
value["identifier"], value["scheme"].lower(), url_scheme="https"
|
21
|
+
)
|
22
|
+
if url:
|
23
|
+
value["url"] = url
|
24
|
+
except Exception:
|
25
|
+
pass
|
21
26
|
return value
|
22
27
|
|
23
28
|
|
@@ -88,7 +88,7 @@ oarepo_runtime/resources/responses.py,sha256=Pj-K_r-QO9B2n9STcfqsrBQu1e3iYhdEBFS
|
|
88
88
|
oarepo_runtime/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
89
|
oarepo_runtime/services/components.py,sha256=0aqmuNbGCQhfOI22f6mM2DxuKSTqstGOGyisOiqw9KE,15481
|
90
90
|
oarepo_runtime/services/generators.py,sha256=j87HitHA_w2awsz0C5IAAJ0qjg9JMtvdO3dvh6FQyfg,250
|
91
|
-
oarepo_runtime/services/results.py,sha256=
|
91
|
+
oarepo_runtime/services/results.py,sha256=MxkoMkquISMKyP6De_xOF-IzQE9wRYtq3d_OFAqqIVo,6156
|
92
92
|
oarepo_runtime/services/search.py,sha256=t0WEe2VrbCzZ06-Jgz7C9-pc9y27BqAgTEXldEHskfk,9409
|
93
93
|
oarepo_runtime/services/service.py,sha256=TI2ulEVlSR7HZnfPYltLl8Vf4O9fhJ7rHaV6G4HWbrc,1893
|
94
94
|
oarepo_runtime/services/config/__init__.py,sha256=aRxCBLN9pqCgdYlF-KJYtDzt2mwJ66npdceOAZkMfa0,888
|
@@ -135,7 +135,7 @@ oarepo_runtime/services/schema/marshmallow_to_json_schema.py,sha256=VYLnVWHOoaxW
|
|
135
135
|
oarepo_runtime/services/schema/oneofschema.py,sha256=GnWH4Or_G5M0NgSmCoqMI6PBrJg5AC9RHrcB5QDKRq0,6661
|
136
136
|
oarepo_runtime/services/schema/polymorphic.py,sha256=bAbUoTIeDBiJPYPhpLEKKZekEdkHlpqkmNxk1hN3PDw,564
|
137
137
|
oarepo_runtime/services/schema/rdm.py,sha256=dBy1KCJ_XYAN_cffoRqLfQVEdZOKwmSpqGdEP4OL64k,1280
|
138
|
-
oarepo_runtime/services/schema/rdm_ui.py,sha256=
|
138
|
+
oarepo_runtime/services/schema/rdm_ui.py,sha256=oXV8wGFChL84Y1xtkhZ89eZ4Ngr6RV8iavf32e4nCVI,3544
|
139
139
|
oarepo_runtime/services/schema/ui.py,sha256=ae75YON8yNGxblywCgqX2OS9ACXHGzcN_adlLKIRUYk,7937
|
140
140
|
oarepo_runtime/services/schema/validation.py,sha256=aRfeR-2D1XXYqI3_U5FHoFvJrYjZlpM8nB35-M_u3Qs,2300
|
141
141
|
oarepo_runtime/translations/default_translations.py,sha256=060GBlA1ghWxfeumo6NqxCCZDb-6OezOuF6pr-_GEOQ,104
|
@@ -147,13 +147,13 @@ oarepo_runtime/translations/en/LC_MESSAGES/messages.po,sha256=7-5S3iINOSFSI5gVdR
|
|
147
147
|
oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
148
148
|
oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
|
149
149
|
oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
|
150
|
-
oarepo_runtime-1.5.
|
150
|
+
oarepo_runtime-1.5.132.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
151
151
|
tests/marshmallow_to_json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
152
152
|
tests/marshmallow_to_json/test_datacite_ui_schema.py,sha256=82iLj8nW45lZOUewpWbLX3mpSkpa9lxo-vK-Qtv_1bU,48552
|
153
153
|
tests/marshmallow_to_json/test_simple_schema.py,sha256=izZN9p0v6kovtSZ6AdxBYmK_c6ZOti2_z_wPT_zXIr0,1500
|
154
154
|
tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
155
|
-
oarepo_runtime-1.5.
|
156
|
-
oarepo_runtime-1.5.
|
157
|
-
oarepo_runtime-1.5.
|
158
|
-
oarepo_runtime-1.5.
|
159
|
-
oarepo_runtime-1.5.
|
155
|
+
oarepo_runtime-1.5.132.dist-info/METADATA,sha256=N8ZqyVaKnHlbzZMniukRmlW4Jp0U4UlTAEjciSgI7k8,4743
|
156
|
+
oarepo_runtime-1.5.132.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
157
|
+
oarepo_runtime-1.5.132.dist-info/entry_points.txt,sha256=k7O5LZUOGsVeSpB7ulU0txBUNp1CVQG7Q7TJIVTPbzU,491
|
158
|
+
oarepo_runtime-1.5.132.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
|
159
|
+
oarepo_runtime-1.5.132.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|