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.
@@ -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 = [ msg for msg in messages if isinstance(msg, str) ]
54
- non_str_messages = [ msg for msg in messages if not isinstance(msg, str) ]
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(postprocess_error_messages(error["field"], error["messages"]))
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
- # Project the record
110
- projection = self._schema.dump(
111
- record,
112
- context=dict(
113
- identity=self._identity,
114
- record=record,
115
- ),
116
- )
117
- if hasattr(self._service.config, "links_search_item"):
118
- links_tpl = self._service.config.search_item_links_template(
119
- self._service.config.links_search_item
120
- )
121
- projection["links"] = links_tpl.expand(self._identity, record)
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
- # todo optimization viz FieldsResolver
127
- for c in self.components:
128
- c.update_data(
129
- identity=self._identity,
130
- record=record,
131
- projection=projection,
132
- expand=self._expand,
133
- )
134
- yield projection
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
- if "identifier" in value and "scheme" in value:
16
- url = to_url(
17
- value["identifier"], value["scheme"].lower(), url_scheme="https"
18
- )
19
- if url:
20
- value["url"] = url
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oarepo-runtime
3
- Version: 1.5.131
3
+ Version: 1.5.132
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -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=Ap2mUJHl3V4BSduTrBWPuco0inQVq0QsuCbVhez48uY,5705
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=KBTPAv4NkTNuhxIbOGzdBUXkwqKb-2q5EjWH2eTzc84,3430
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.131.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
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.131.dist-info/METADATA,sha256=L5WjE2XqzWZFq_xhsIJwdo7NwozJhSNbaT-iZpyCjS4,4743
156
- oarepo_runtime-1.5.131.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
157
- oarepo_runtime-1.5.131.dist-info/entry_points.txt,sha256=k7O5LZUOGsVeSpB7ulU0txBUNp1CVQG7Q7TJIVTPbzU,491
158
- oarepo_runtime-1.5.131.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
159
- oarepo_runtime-1.5.131.dist-info/RECORD,,
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,,