Skip to content

Commit 8e90161

Browse files
author
Pablo Panero
committed
dumpers: support for different load type
1 parent 06c7be0 commit 8e90161

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

invenio_records/dumpers/elasticsearch.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def _dump_model_field(self, record, model_field_name, dump, dump_key,
151151
dump[dump_key] = self._serialize(val, dump_type)
152152

153153
def _load_model_field(self, record_cls, model_field_name, dump, dump_key,
154-
dump_type):
154+
load_type):
155155
"""Helper method to load model fields from dump.
156156
157157
:param record_cls: The record class being used for loading.
@@ -169,12 +169,11 @@ def _load_model_field(self, record_cls, model_field_name, dump, dump_key,
169169
return val
170170

171171
# Determine dump data type if not provided
172-
if dump_type is None:
173-
sa_field = getattr(record_cls.model_cls, model_field_name)
174-
dump_type = self._sa_type(record_cls.model_cls, model_field_name)
172+
if load_type is None:
173+
load_type = self._sa_type(record_cls.model_cls, model_field_name)
175174

176175
# Deserialize the value
177-
return self._deserialize(val, dump_type)
176+
return self._deserialize(val, load_type)
178177

179178
@staticmethod
180179
def _iter_modelfields(record_cls):
@@ -247,15 +246,15 @@ def load(self, dump_data, record_cls):
247246
# Load explicitly defined model fields.
248247
model_data = {}
249248
it = self._model_fields.items()
250-
for model_field_name, (dump_key, dump_type) in it:
249+
for model_field_name, (dump_key, load_type) in it:
251250
model_data[model_field_name] = self._load_model_field(
252-
record_cls, model_field_name, dump_data, dump_key, dump_type)
251+
record_cls, model_field_name, dump_data, dump_key, load_type)
253252

254253
# Load model fields defined as system fields
255254
for systemfield in self._iter_modelfields(record_cls):
256255
model_data[systemfield.model_field_name] = self._load_model_field(
257256
record_cls, systemfield.model_field_name, dump_data,
258-
systemfield.dump_key, systemfield.dump_type)
257+
systemfield.dump_key, systemfield.load_type)
259258

260259
# Initialize model if an id was provided.
261260
if model_data.get('id') is not None:

invenio_records/systemfields/model.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ModelField(SystemField):
1616
"""Model field for providing get and set access on a model field."""
1717

1818
def __init__(self, model_field_name=None, dump=True, dump_key=None,
19-
dump_type=None):
19+
dump_type=None, load_type=None):
2020
"""Initialize the field.
2121
2222
:param model_field_name: Name of field on the database model.
@@ -29,6 +29,7 @@ def __init__(self, model_field_name=None, dump=True, dump_key=None,
2929
self.dump = dump
3030
self._dump_key = dump_key
3131
self._dump_type = dump_type
32+
self._load_type = load_type
3233

3334
#
3435
# Helpers
@@ -58,6 +59,14 @@ def dump_type(self):
5859
"""
5960
return self._dump_type
6061

62+
@property
63+
def load_type(self):
64+
"""The data type used to determine how to deserialize the model field.
65+
66+
Defaults to dump_type.
67+
"""
68+
return self._load_type or self._dump_type
69+
6170
def _set(self, model, value):
6271
"""Internal method to set value on the model's field."""
6372
setattr(model, self.model_field_name, value)

0 commit comments

Comments
 (0)