-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dumpers: support for different load type #274
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -9,15 +9,20 @@ | |||||||||||||||||||||||||||
"""Test the dumpers API.""" | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
from datetime import date, datetime | ||||||||||||||||||||||||||||
from enum import Enum | ||||||||||||||||||||||||||||
from uuid import UUID | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
import pytest | ||||||||||||||||||||||||||||
from invenio_db import db | ||||||||||||||||||||||||||||
from sqlalchemy.dialects import mysql | ||||||||||||||||||||||||||||
from sqlalchemy_utils.types import ChoiceType | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
from invenio_records.api import Record | ||||||||||||||||||||||||||||
from invenio_records.dumpers import ElasticsearchDumper, ElasticsearchDumperExt | ||||||||||||||||||||||||||||
from invenio_records.dumpers.relations import RelationDumperExt | ||||||||||||||||||||||||||||
from invenio_records.models import RecordMetadataBase | ||||||||||||||||||||||||||||
from invenio_records.systemfields import SystemFieldsMixin | ||||||||||||||||||||||||||||
from invenio_records.systemfields.model import ModelField | ||||||||||||||||||||||||||||
from invenio_records.systemfields.relations import PKListRelation, \ | ||||||||||||||||||||||||||||
PKRelation, RelationsField | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
@@ -215,3 +220,40 @@ class RecordWithRelations(Record): | |||||||||||||||||||||||||||
# Load it | ||||||||||||||||||||||||||||
# new_record = Record.loads(dump, loader=dumper) | ||||||||||||||||||||||||||||
# assert 'count' not in new_record | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
def test_load_dump_type(testapp): | ||||||||||||||||||||||||||||
dumper = ElasticsearchDumper() | ||||||||||||||||||||||||||||
rec = TestRecord.create({}, test=EnumTestModel.REGISTERED) | ||||||||||||||||||||||||||||
# Serialize | ||||||||||||||||||||||||||||
dumped_data = dumper.dump(rec, {}) | ||||||||||||||||||||||||||||
assert isinstance(dumped_data["test"], str) | ||||||||||||||||||||||||||||
# Deserialize | ||||||||||||||||||||||||||||
loaded_data = dumper.load(dumped_data, TestRecord) | ||||||||||||||||||||||||||||
assert isinstance(loaded_data.test, EnumTestModel) | ||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is currently failing, as the data is being loaded as a See dumper's load module field: invenio-records/invenio_records/dumpers/elasticsearch.py Lines 164 to 176 in 1271fd7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just to clarify, this is an issue with the master branch, independently of the previous commit or not ( |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Similar to PIDStatus | ||||||||||||||||||||||||||||
class EnumTestModel(Enum): | ||||||||||||||||||||||||||||
NEW = "N" | ||||||||||||||||||||||||||||
REGISTERED = "R" | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
def __init__(self, value): | ||||||||||||||||||||||||||||
"""Hack.""" | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
def __str__(self): | ||||||||||||||||||||||||||||
"""Return its value.""" | ||||||||||||||||||||||||||||
return self.value | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
class TestMetadata(db.Model, RecordMetadataBase): | ||||||||||||||||||||||||||||
"""Represent a record metadata.""" | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
__tablename__ = 'test_dumper_table' | ||||||||||||||||||||||||||||
test = db.Column(ChoiceType(EnumTestModel, impl=db.CHAR(1))) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Similar to ModelPIDField | ||||||||||||||||||||||||||||
class TestRecord(Record, SystemFieldsMixin): | ||||||||||||||||||||||||||||
model_cls = TestMetadata | ||||||||||||||||||||||||||||
test = ModelField(dump_type=str) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@slint this is the "bug" @alejandromumo discovered. This variable is never used, we could potentitally just return it, but then we would lose the capability of custom serializations, which is what we (and in most of the cases want).