Exemple #1
0
def check_transformation(marcxml_body, json_body):
    blob = create_record(marcxml.format(marcxml_body))
    model._default_fields = {"_migration": {**get_helper_dict()}}

    record = model.do(blob, ignore_missing=False)
    expected = {"_migration": {**get_helper_dict()}}
    expected.update(**json_body)
    assert record == expected
Exemple #2
0
def test_publication_info(app):
    """Test publication info."""
    with app.app_context():
        host = current_app.config["SPA_HOST"]
        check_transformation(
            """
            <datafield tag="962" ind1=" " ind2=" ">
                <subfield code="b">2155631</subfield>
                <subfield code="n">genoa20160330</subfield>
                <subfield code="k">1</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(record_type="document"),
                },
                "urls": [
                    {
                        "value": f"{host}/legacy/2155631",
                        "description": "is chapter of"
                    }
                ],
                "publication_info": [
                    {
                        "pages": '1',
                    }
                ],
            },
        )
Exemple #3
0
class CDSStandard(CdsIlsOverdo):
    """CDS Standard Overdo model."""

    __query__ = ("003:SzGeCERN 690C_:STANDARD OR 980__:STANDARD")

    __ignore_keys__ = CDS_IGNORE_FIELDS

    _default_fields = {
        "_migration": {
            **get_helper_dict(record_type="document")
        }
    }

    rectype = "document"

    def do(
        self,
        blob,
        ignore_missing=True,
        exception_handlers=None,
        init_fields=None,
    ):
        """Overwrite the do method."""
        init_fields = deepcopy(self._default_fields)
        return super().do(blob, ignore_missing, exception_handlers,
                          init_fields)
Exemple #4
0
def test_monograph_volume_migration_doi(app):
    """Test multipart volume with DOIs attached to volumes."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="024" ind1="7" ind2=" ">
            <subfield code="2">DOI</subfield>
            <subfield code="a">10.1007/978-3-030-49613-5</subfield>
            <subfield code="q">ebook (v.1)</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes_identifiers": [{
                        "doi": "10.1007/978-3-030-49613-5",
                        "material": "ebook",
                        "source": None,
                        "volume": "1",
                    }],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #5
0
def test_monograph_volume_url(app):
    """Test multipart volume with urls."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="856" ind1="4" ind2=" ">
            <subfield code="u">https://cds.cern.ch/auth.py?r=EBLIB_P_1890382</subfield>
            <subfield code="y">ebook (v.1)</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes_urls": [{
                        "description": "ebook",
                        "url": "https://cds.cern.ch/auth.py?r=EBLIB_P_1890382",
                        "volume": "1",
                    }],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #6
0
def test_monograph_series_authors(app):
    """Test multipart authors."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="100" ind1=" " ind2=" ">
            <subfield code="a">Mehra, Jagdish</subfield>
            </datafield>
            <datafield tag="700" ind1=" " ind2=" ">
            <subfield code="a">Rechenberg, Helmut</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type": "multipart",
                },
                "authors": [
                    {
                        "full_name": "Mehra, Jagdish",
                        "roles": ["AUTHOR"]
                    },
                    {
                        "full_name": "Rechenberg, Helmut",
                        "roles": ["AUTHOR"],
                    },
                ],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #7
0
def test_monograph_volume_migration_no_description(app):
    """Test multipart volume without description (https://cds.cern.ch/record/287517)."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="020" ind1=" " ind2=" ">
            <subfield code="a">1560810726</subfield>
            <subfield code="u">v.13</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes_identifiers": [{
                        "is_electronic": False,
                        "isbn": "1560810726",
                        "volume": "13",
                    }],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #8
0
class CDSBook(CdsIlsOverdo):
    """Translation Index for CDS Books."""

    __query__ = (
        '003:SzGeCERN 690C_:BOOK OR 690C_:"YELLOW REPORT" OR '
        "980__:PROCEEDINGS OR "
        "(-980:STANDARD 980:BOOK) OR "
        "697C_:LEGSERLIB AND "
        "(-980__:DELETED -980__:MIGRATED -980__:STANDARD "
        "-596__:MULTIVOLUMES)"
    )

    __model_ignore_keys__ = {
        # this field is used to match multipart monograph items as volumes
        "020__b",
    }

    __ignore_keys__ = CDS_IGNORE_FIELDS | __model_ignore_keys__

    _default_fields = {"_migration": {**get_helper_dict()}}

    def do(
        self,
        blob,
        ignore_missing=True,
        exception_handlers=None,
        init_fields=None,
    ):
        """Overwrite the do method."""
        init_fields = deepcopy(self._default_fields)
        return super().do(
            blob, ignore_missing, exception_handlers, init_fields
        )
Exemple #9
0
def test_monograph_invalid_volume_migration(app):
    with app.app_context():
        check_transformation(
            """
            <datafield tag="020" ind1=" " ind2=" ">
            <subfield code="a">9788808175366</subfield>
            <subfield code="u">print version, paperback (v.1)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
            <subfield code="a">9788808247049</subfield>
            <subfield code="u">print version, paperback (v.2)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
            <subfield code="a">9788808047038</subfield>
            <subfield code="u">print version, paperback (v.2, CD-ROM)</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes_identifiers": [
                        {
                            "is_electronic": False,
                            "isbn": "9788808175366",
                            "physical_description": "print "
                            "version, "
                            "paperback",
                            "volume": "1",
                        },
                        {
                            "is_electronic": False,
                            "isbn": "9788808247049",
                            "physical_description": "print "
                            "version, "
                            "paperback",
                            "volume": "2",
                        },
                        {
                            "is_electronic": False,
                            "isbn": "9788808047038",
                            "volume": "2",
                        },
                    ],
                    "volumes_urls": [],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #10
0
class CDSDocument(CdsIlsOverdo):
    """Translation Index for CDS Books."""

    __query__ = ('003:SzGeCERN 690C_:BOOK OR 690C_:CONFERENCE OR '
                 '690C_:"YELLOW REPORT" OR '
                 "980__:PROCEEDINGS OR "
                 "(-980:STANDARD 980:BOOK) OR "
                 "697C_:LEGSERLIB AND "
                 "(-980__:STANDARD "
                 "-596__:MULTIVOLUMES1 -596__:MULTIVOLUMESX)")

    __model_ignore_keys__ = {
        # this field is used to match multipart monograph items as volumes
        "020__b",
        "0247_9",
        "084__2",
        "084__a",
        "270__b",
        "540__u",
        "700__i",
        "710__5",
        "700__m",
        "100__m",
        "775__n",
        "775__p",
    }

    __ignore_keys__ = CDS_IGNORE_FIELDS | __model_ignore_keys__

    _default_fields = {
        "_migration": {
            **get_helper_dict(record_type="document")
        }
    }

    rectype = "document"

    def do(
        self,
        blob,
        ignore_missing=True,
        exception_handlers=None,
        init_fields=None,
    ):
        """Overwrite the do method."""
        init_fields = deepcopy(self._default_fields)
        return super().do(blob, ignore_missing, exception_handlers,
                          init_fields)
Exemple #11
0
def test_monograph_volume_migration_doi(app):
    """Test multipart volume with DOIs attached to volumes."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="024" ind1="7" ind2=" ">
            <subfield code="2">DOI</subfield>
            <subfield code="a">10.1007/978-3-030-49613-5</subfield>
            <subfield code="q">ebook (v.1)</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(record_type="document"),
                    "record_type":
                    "multipart",
                    "volumes_identifiers": [{
                        "identifiers": [{
                            "value": "10.1007/978-3-030-49613-5",
                            "material": "DIGITAL",
                            "scheme": "DOI"
                        }],
                        "volume":
                        "1",
                        '_migration': {
                            'eitems_has_proxy':
                            True,
                            'eitems_proxy': [{
                                'open_access': False,
                                'url': {
                                    'description':
                                    'ebook '
                                    '(v.1)',
                                    'value':
                                    'http://dx.doi.org/10.1007/978-3-030-49613-5'
                                }
                            }]
                        }
                    }],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #12
0
def test_monograph_volume_barcode(app):
    """Test multipart volume with barcodes (= items)."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="088" ind1=" " ind2=" ">
            <subfield code="n">pt.A</subfield>
            <subfield code="x">73-0089-0</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type": "multipart",
                    "volumes": [{"barcode": "73-0089-0", "volume": "A"}],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #13
0
def test_monograph_volume_url(app):
    """Test multipart volume with urls."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="856" ind1="4" ind2=" ">
            <subfield code="u">https://cds.cern.ch/auth.py?r=EBLIB_P_1890382</subfield>
            <subfield code="y">e-book (v.1)</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(record_type="multipart"),
                    "volumes_urls": [{
                        "_migration": {
                            "eitems_ebl": [{
                                "url": {
                                    "description":
                                    "e-book (v.1)",
                                    "value":
                                    "https://cds.cern.ch/auth.py?r=EBLIB_P_1890382"
                                }
                            }],
                            "eitems_has_ebl":
                            True,
                            "eitems_external": [],
                            "eitems_file_links": [],
                            "eitems_proxy": [],
                            "eitems_safari": [],
                            "record_type":
                            "document"
                        },
                        "volume": "1",
                    }],
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #14
0
def test_monograph_legacy_report_number(app):
    """Test multipart representation in CDS."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="088" ind1=" " ind2=" ">
            <subfield code="a">IAEA-INIS-20-REV-0-D</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type": "multipart",
                },
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "identifiers": [{
                    "scheme": "report_number",
                    "value": "IAEA-INIS-20-REV-0-D",
                }],
            },
            multipart_model,
        )
Exemple #15
0
def test_monograph_legacy_representation(app):
    """Test multipart representation in CDS."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="596" ind1=" " ind2=" ">
            <subfield code="a">MULTIVOLUMES-1</subfield>
            </datafield>
            <datafield tag="597" ind1=" " ind2=" ">
            <subfield code="a">Vol965</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "record_type": "multipart",
                    "multipart_id": "Vol965",
                    "multivolume_record": False,
                },
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
            },
            multipart_model,
        )
Exemple #16
0
class CDSStandard(CdsIlsOverdo):
    """Translation Index for CDS Books."""

    __query__ = (
        "003:SzGeCERN 690C_:STANDARD OR 980__:STANDARD "
        "-980__:DELETED -980__:MIGRATED"
    )

    __ignore_keys__ = CDS_IGNORE_FIELDS

    _default_fields = {"_migration": {**get_helper_dict()}}

    def do(
        self,
        blob,
        ignore_missing=True,
        exception_handlers=None,
        init_fields=None,
    ):
        """Overwrite the do method."""
        init_fields = deepcopy(self._default_fields)
        return super().do(
            blob, ignore_missing, exception_handlers, init_fields
        )
Exemple #17
0
def replace_fields_in_volume(document_json_template, volume_json, json_record):
    """Replace values of volume json template with new data."""
    # clean the template
    document_json_template["_migration"] = \
        get_helper_dict(record_type="document")
    document_json_template["_migration"]["legacy_recid"] = json_record[
        "legacy_recid"]
    if "urls" in document_json_template:
        del document_json_template["urls"]
    if "identifiers" in document_json_template:
        del document_json_template["identifiers"]
    document_json_template["title"] = json_record.get("title")

    current_volume_index = volume_json.get("volume")
    volume_title = volume_json.get("title")
    volume_publication_year = volume_json.get("publication_year")

    # additional info for each volume
    volumes_items_list = json_record["_migration"]["items"]
    volumes_identifiers_list = json_record["_migration"]["volumes_identifiers"]
    volumes_urls_list = json_record["_migration"]["volumes_urls"]

    if volume_title:
        document_json_template["title"] = volume_title

    # split items per volume
    volume_items = [
        item for item in volumes_items_list
        if item.get("volume") == current_volume_index
    ]
    if volume_items:
        document_json_template["_migration"]["items"] = volume_items

    # split urls per volume
    volume_urls = [
        entry.get("urls") for entry in volumes_urls_list
        if entry.get("urls") and entry.get("volume") == current_volume_index
    ]
    if volume_urls:
        document_json_template["urls"] = volume_urls[0]

    volume_eitems = [
        entry["_migration"] for entry in volumes_urls_list if
        "_migration" in entry and entry.get("volume") == current_volume_index
    ]

    if len(volume_eitems) == 1:
        document_json_template["_migration"].update(**volume_eitems[0])
    else:
        for entry in volumes_urls_list:
            if entry.get("volume") == current_volume_index:
                document_json_template["_migration"]["eitems_ebl"] \
                    += entry.get("_migration", {}).get("eitems_ebl", [])
                document_json_template["_migration"]["eitems_safari"] \
                    += entry.get("_migration", {}).get("eitems_safari", [])
                document_json_template["_migration"]["eitems_external"] \
                    += entry.get("_migration", {}).get("eitems_external", [])
                document_json_template["_migration"]["eitems_proxy"] \
                    += entry.get("_migration", {}).get("eitems_proxy", [])
                document_json_template["_migration"]["eitems_file_links"] \
                    += entry.get("_migration", {}).get("eitems_file_links", [])
                document_json_template["_migration"]["eitems_has_ebl"] = bool(
                    document_json_template["_migration"]["eitems_ebl"])
                document_json_template["_migration"][
                    "eitems_has_proxy"] = bool(
                        document_json_template["_migration"]["eitems_proxy"])
                document_json_template["_migration"][
                    "eitems_has_safari"] = bool(
                        document_json_template["_migration"]["eitems_safari"])
                document_json_template["_migration"]["eitems_has_files"] = bool(
                    document_json_template["_migration"]["eitems_file_links"])
                document_json_template["_migration"][
                    "eitems_has_external"] = bool(
                        document_json_template["_migration"]
                        ["eitems_external"])

    # split identifiers per volume
    volume_identifiers = [
        volume_identifier["identifiers"][0]
        for volume_identifier in volumes_identifiers_list
        if volume_identifier.get("volume") == current_volume_index
    ]
    # add DOIs to the future eitems
    for volume_identifier in volumes_identifiers_list:
        if volume_identifier.get("volume") == current_volume_index:
            eitems_proxy = volume_identifier.get("_migration", {}) \
                .get("eitems_proxy")
            if eitems_proxy:
                document_json_template["_migration"]["eitems_proxy"] += \
                    eitems_proxy
                document_json_template["_migration"]["eitems_has_proxy"] = True
    if volume_identifiers:
        document_json_template["identifiers"] = volume_identifiers
    if volume_publication_year:
        document_json_template["publication_year"] = volume_publication_year
Exemple #18
0
def test_monograph_with_electronic_isbns(app):
    """Test multipart monographs with electronic isbns."""
    with app.app_context():
        check_transformation(
            """
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">0817631852</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">0817631852</subfield>
                <subfield code="u">print version (v.2)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">0817631879</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9780817631857</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9780817631871</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781461239406</subfield>
                <subfield code="b">electronic version (v.2)</subfield>
                <subfield code="u">electronic version (v.2)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781461251545</subfield>
                <subfield code="b">electronic version (v.1)</subfield>
                <subfield code="u">electronic version (v.1)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781461295891</subfield>
                <subfield code="u">print version (v.1)</subfield>
            </datafield>
            """,
            {
                "identifiers": [
                    {
                        "scheme": "ISBN",
                        "value": "0817631852"
                    },
                    {
                        "scheme": "ISBN",
                        "value": "0817631879"
                    },
                    {
                        "scheme": "ISBN",
                        "value": "9780817631857"
                    },
                    {
                        "scheme": "ISBN",
                        "value": "9780817631871"
                    },
                ],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes_identifiers": [
                        {
                            "is_electronic": False,
                            "physical_description": "print version",
                            "volume": "2",
                            "isbn": "0817631852",
                        },
                        {
                            "is_electronic": True,
                            "physical_description": "electronic version",
                            "volume": "2",
                            "isbn": "9781461239406",
                        },
                        {
                            "is_electronic": True,
                            "physical_description": "electronic version",
                            "volume": "1",
                            "isbn": "9781461251545",
                        },
                        {
                            "is_electronic": False,
                            "physical_description": "print version",
                            "volume": "1",
                            "isbn": "9781461295891",
                        },
                    ],
                },
            },
            multipart_model,
        )
Exemple #19
0
def test_monograph(app):
    """Test monographs."""

    with app.app_context():
        check_transformation(
            """
            <datafield tag="245" ind1=" " ind2=" ">
                <subfield code="a">La fisica di Amaldi</subfield>
                <subfield code="b">idee ed esperimenti : con CD-ROM</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.1</subfield>
                <subfield code="p">Introduzione alla fisica meccanica</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.2</subfield>
                <subfield code="p">Termologia, onde, relatività</subfield>
            </datafield>
            <datafield tag="300" ind1=" " ind2=" ">
                <subfield code="a">2 v. ; 2 CD-ROM suppl</subfield>
            </datafield>
            """,
            {
                "title":
                "La fisica di Amaldi",
                "alternative_titles": [{
                    "value": "idee ed esperimenti : con CD-ROM",
                    "type": "SUBTITLE",
                }],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "number_of_volumes":
                "2",
                "_migration": {
                    **get_helper_dict(),
                    "record_type":
                    "multipart",
                    "volumes": [
                        {
                            "title": "Introduzione alla fisica meccanica",
                            "volume": "1",
                        },
                        {
                            "title": "Termologia, onde, relatività",
                            "volume": "2",
                        },
                    ],
                    "is_multipart":
                    True,
                },
            },
            multipart_model,
        )

        check_transformation(
            """
            <datafield tag="245" ind1=" " ind2=" ">
                <subfield code="a">La fisica di Amaldi</subfield>
                <subfield code="b">idee ed esperimenti : con CD-ROM</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.2</subfield>
                <subfield code="p">Termologia, onde, relatività</subfield>
            </datafield>
            <datafield tag="300" ind1=" " ind2=" ">
                <subfield code="a">2 v. ; 2 CD-ROM suppl</subfield>
            </datafield>
            """,
            {
                "title":
                "La fisica di Amaldi",
                "alternative_titles": [{
                    "value": "idee ed esperimenti : con CD-ROM",
                    "type": "SUBTITLE",
                }],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "number_of_volumes":
                "2",
                "_migration": {
                    **get_helper_dict(),
                    "is_multipart":
                    True,
                    "record_type":
                    "multipart",
                    "volumes": [{
                        "title": "Termologia, onde, relatività",
                        "volume": "2",
                    }],
                },
            },
            multipart_model,
        )

        check_transformation(
            """
            <datafield tag="245" ind1=" " ind2=" ">
                <subfield code="a">La fisica di Amaldi</subfield>
                <subfield code="b">idee ed esperimenti : con CD-ROM</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.2</subfield>
                <subfield code="p">Termologia, onde, relatività</subfield>
            </datafield>
            <datafield tag="300" ind1=" " ind2=" ">
                <subfield code="a">2 p ; 2 CD-ROM suppl</subfield>
            </datafield>
            """,
            {
                "title":
                "La fisica di Amaldi",
                "alternative_titles": [{
                    "value": "idee ed esperimenti : con CD-ROM",
                    "type": "SUBTITLE",
                }],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "_migration": {
                    **get_helper_dict(),
                    "is_multipart":
                    True,
                    "record_type":
                    "multipart",
                    "volumes": [{
                        "title": "Termologia, onde, relatività",
                        "volume": "2",
                    }],
                },
            },
            multipart_model,
        )

        check_transformation(
            """
            <datafield tag="245" ind1=" " ind2=" ">
                <subfield code="a">La fisica di Amaldi</subfield>
                <subfield code="b">idee ed esperimenti : con CD-ROM</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.2</subfield>
                <subfield code="p">Termologia, onde, relatività</subfield>
            </datafield>
            <datafield tag="300" ind1=" " ind2=" ">
                <subfield code="a">multi. p ; 2 CD-ROM suppl</subfield>
            </datafield>
            """,
            {
                "title":
                "La fisica di Amaldi",
                "alternative_titles": [{
                    "value": "idee ed esperimenti : con CD-ROM",
                    "type": "SUBTITLE",
                }],
                "mode_of_issuance":
                "MULTIPART_MONOGRAPH",
                "_migration": {
                    **get_helper_dict(),
                    "is_multipart":
                    True,
                    "record_type":
                    "multipart",
                    "volumes": [{
                        "title": "Termologia, onde, relatività",
                        "volume": "2",
                    }],
                },
            },
            multipart_model,
        )
        with pytest.raises(UnexpectedValue):
            check_transformation(
                """
                <datafield tag="245" ind1=" " ind2=" ">
                    <subfield code="a">La fisica di Amaldi</subfield>
                    <subfield code="b">idee ed esperimenti : con CD-ROM</subfield>
                </datafield>
                <datafield tag="246" ind1=" " ind2=" ">
                    <subfield code="a">v.2</subfield>
                    <subfield code="b">Termologia, onde, relatività</subfield>
                </datafield>
                <datafield tag="300" ind1=" " ind2=" ">
                    <subfield code="a">2 v. ; 2 CD-ROM suppl</subfield>
                </datafield>
                """,
                {
                    "title":
                    "La fisica di Amaldi",
                    "alternative_titles": [
                        {
                            "value": "idee ed esperimenti : con CD-ROM",
                            "type": "SUBTITLE",
                        },
                        {
                            "type": "ALTERNATIVE_TITLE",
                            "value": "v.2"
                        },
                        {
                            "type": "SUBTITLE",
                            "value": "Termologia, onde, relatività",
                        },
                    ],
                    "mode_of_issuance":
                    "MULTIPART_MONOGRAPH",
                    "number_of_volumes":
                    "2",
                    "_migration": {
                        **get_helper_dict(),
                        "is_multipart": False,
                        "record_type": "multipart",
                        "volumes": [],
                    },
                },
                multipart_model,
            )

        with pytest.raises(MissingRequiredField):
            check_transformation(
                """
                <datafield tag="246" ind1=" " ind2=" ">
                    <subfield code="n">v.2</subfield>
                    <subfield code="p">Termologia, onde, relatività</subfield>
                </datafield>
                <datafield tag="300" ind1=" " ind2=" ">
                    <subfield code="a">2 v. ; 2 CD-ROM suppl</subfield>
                </datafield>
                """,
                {
                    "title":
                    "La fisica di Amaldi",
                    "alternative_titles": [{
                        "value": "idee ed esperimenti : con CD-ROM",
                        "type": "SUBTITLE",
                    }],
                    "mode_of_issuance":
                    "MULTIPART_MONOGRAPH",
                    "number_of_volumes":
                    "2",
                    "_migration": {
                        **get_helper_dict(),
                        "is_multipart": True,
                        "record_type": "multipart",
                        "volumes": [],
                    },
                },
                multipart_model,
            )
Exemple #20
0
def test_monograph_migration(app):
    with app.app_context():
        check_transformation(
            """
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">1108052819</subfield>
                <subfield code="u">print version, paperback (v.3)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781108052818</subfield>
                <subfield code="u">print version, paperback (v.3)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781108052801</subfield>
                <subfield code="u">print version, paperback (v.2)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">1108052800</subfield>
                <subfield code="u">print version, paperback (v.2)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781108052825</subfield>
                <subfield code="u">print version, paperback (set)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">9781108052795</subfield>
                <subfield code="u">print version, paperback (v.1)</subfield>
            </datafield>
            <datafield tag="020" ind1=" " ind2=" ">
                <subfield code="a">1108052797</subfield>
                <subfield code="u">print version, paperback (v.1)</subfield>
            </datafield>
            <datafield tag="245" ind1=" " ind2=" ">
                <subfield code="a">Wissenschaftliche Abhandlungen</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.1</subfield>
                <subfield code="p">1865-1874</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.2</subfield>
                <subfield code="p">1875-1881</subfield>
            </datafield>
            <datafield tag="246" ind1=" " ind2=" ">
                <subfield code="n">v.3</subfield>
                <subfield code="p">1882-1905</subfield>
            </datafield>
            <datafield tag="300" ind1=" " ind2=" ">
                <subfield code="a">3 v</subfield>
            </datafield>
            """,
            {
                "_migration": {
                    **get_helper_dict(),
                    "volumes_identifiers": [
                        {
                            "volume": "3",
                            "isbn": "1108052819",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                        {
                            "volume": "3",
                            "isbn": "9781108052818",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                        {
                            "volume": "2",
                            "isbn": "9781108052801",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                        {
                            "volume": "2",
                            "isbn": "1108052800",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                        {
                            "volume": "1",
                            "isbn": "9781108052795",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                        {
                            "volume": "1",
                            "isbn": "1108052797",
                            "physical_description": "print version, paperback",
                            "is_electronic": False,
                        },
                    ],
                    "volumes": [
                        {
                            "title": "1865-1874",
                            "volume": "1"
                        },
                        {
                            "title": "1875-1881",
                            "volume": "2"
                        },
                        {
                            "title": "1882-1905",
                            "volume": "3"
                        },
                    ],
                    "record_type":
                    "multipart",
                    "is_multipart":
                    True,
                },
                "title": "Wissenschaftliche Abhandlungen",
                "mode_of_issuance": "MULTIPART_MONOGRAPH",
                "number_of_volumes": "3",
                "identifiers": [{
                    "scheme": "ISBN",
                    "value": "9781108052825"
                }],
                "physical_description": "print version, paperback",
            },
            multipart_model,
        )