Skip to content

Commit b6296cc

Browse files
zubeydecivelekzzacharo
authored andcommitted
schema: normalize MARC tag keys to numeric format
1 parent f9285f9 commit b6296cc

1 file changed

Lines changed: 30 additions & 2 deletions

File tree

  • cds/modules/records/serializers/schemas

cds/modules/records/serializers/schemas/common.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@
1919

2020
"""Common JSON schemas."""
2121

22-
from marshmallow import RAISE, Schema, ValidationError, fields, validates_schema
22+
from marshmallow import (
23+
RAISE,
24+
Schema,
25+
ValidationError,
26+
fields,
27+
post_load,
28+
pre_load,
29+
validates_schema,
30+
)
2331
from marshmallow.validate import Length
2432
from marshmallow_utils.fields import SanitizedHTML
2533
from marshmallow_utils.html import sanitize_html
@@ -176,6 +184,24 @@ class LegacyMARCFieldsSchema(Schema):
176184
tag_088 = fields.List(fields.Str(), data_key="088")
177185
tag_020 = fields.List(fields.Str(), data_key="020")
178186

187+
def _strip_tag_prefix(self, data):
188+
"""Shared logic to convert tag_XXX <-> XXX."""
189+
transformed = {}
190+
for key, value in data.items():
191+
if key.startswith("tag_"):
192+
transformed[key[4:]] = value
193+
else:
194+
transformed[key] = value
195+
return transformed
196+
197+
@pre_load
198+
def normalize_tag_keys(self, data, **kwargs):
199+
return self._strip_tag_prefix(data)
200+
201+
@post_load
202+
def restore_numeric_keys(self, data, **kwargs):
203+
return self._strip_tag_prefix(data)
204+
179205

180206
class DigitizedMetadataSchema(Schema):
181207
url = fields.Str()
@@ -220,7 +246,9 @@ class CurationSchema(StrictKeysSchema):
220246
internal_note = fields.List(fields.Str())
221247
legacy_marc_fields = fields.Nested(LegacyMARCFieldsSchema)
222248
digitized = fields.List(fields.Nested(DigitizedMetadataSchema))
223-
digitized_preservation = fields.List(fields.Nested(DigitizedPreservationMetadataSchema))
249+
digitized_preservation = fields.List(
250+
fields.Nested(DigitizedPreservationMetadataSchema)
251+
)
224252
digitized_description = fields.List(fields.Str())
225253
digitized_language = fields.List(fields.Str())
226254
digitized_keywords = fields.List(fields.Str())

0 commit comments

Comments
 (0)