Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions cds_migrator_kit/rdm/records/transform/models/fap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2026 CERN.
#
# CDS-RDM is free software; you can redistribute it and/or modify it under
# the terms of the MIT License; see LICENSE file for more details.

"""CDS-RDM FAP (Finance and Administrative Processes) model."""
from cds_migrator_kit.rdm.records.transform.models.base_record import (
rdm_base_record_model,
)
from cds_migrator_kit.transform.overdo import CdsOverdo


class FAPModel(CdsOverdo):
"""Translation model for FAP records."""

__query__ = "980__:INTNOTEFAPPUBL"

__ignore_keys__ = {
"100__m",
"300__a", # number of pages
"8564_8",
"8564_s",
"8564_x",
"8564_y", # file description - done by files dump
"937__c", # last modified by
"937__s", # last modification date
"960__a", # base number usually 12
}

_default_fields = {
# TODO: is this resource type correct?
"resource_type": {"id": "publication-report"},
"custom_fields": {},
}


fap_model = FAPModel(
bases=(rdm_base_record_model,),
entry_point_group="cds_migrator_kit.migrator.rules.fap",
)
37 changes: 37 additions & 0 deletions cds_migrator_kit/rdm/records/transform/xml_processing/rules/fap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2026 CERN.
#
# CDS-RDM is free software; you can redistribute it and/or modify it under
# the terms of the MIT License; see LICENSE file for more details.

"""CDS-RDM FAP (Finance and Administrative Processes) rules."""

from dojson.errors import IgnoreKey
from dojson.utils import for_each_value

from cds_migrator_kit.errors import UnexpectedValue

from ...models.fap import fap_model as model


@model.over("collection", "^690C_")
@for_each_value
def collection(self, key, value):
"""Translates document type field."""
collection = value.get("a").strip().lower()
# TODO: can we drop them?
if collection not in ["cern", "intnote", "publfap"]:
raise UnexpectedValue(subfield="a", value=value, field=key)
raise IgnoreKey("collection")


@model.over("resource_type", "^980__", override=True)
def resource_type(self, key, value):
"""Translates resource_type."""
value = value.get("a")
if value:
value = value.strip().upper()
if value != "INTNOTEFAPPUBL":
raise UnexpectedValue("Unknown resource type (FAP)", field=key, value=value)
raise IgnoreKey("resource_type")
12 changes: 12 additions & 0 deletions cds_migrator_kit/rdm/streams.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,15 @@ records:
- "77617386-632c-4b86-8dd2-68de77ae0018"
load:
legacy_pids_to_redirect: cds_migrator_kit/rdm/data/hr_restricted/duplicated_pids.json
fap:
data_dir: cds_migrator_kit/rdm/data/fap
tmp_dir: cds_migrator_kit/rdm/tmp/fap
log_dir: cds_migrator_kit/rdm/log/fap
restricted: "True"
extract:
dirpath: cds_migrator_kit/rdm/data/fap/dump/
transform:
files_dump_dir: cds_migrator_kit/rdm/data/fap/files/
missing_users: cds_migrator_kit/rdm/data/users
communities_ids:
- ""
5 changes: 5 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ cds_migrator_kit.migrator.models =
te = cds_migrator_kit.rdm.records.transform.models.te:te_model
en = cds_migrator_kit.rdm.records.transform.models.en:en_model
annual_rep = cds_migrator_kit.rdm.records.transform.models.annual_report:annual_rep_model
fap = cds_migrator_kit.rdm.records.transform.models.fap:fap_model
cds_migrator_kit.migrator.rules.base =
base = cds_migrator_kit.transform.xml_processing.rules.base
cds_migrator_kit.migrator.rdm.rules.base =
Expand Down Expand Up @@ -158,6 +159,10 @@ cds_migrator_kit.migrator.rules.annual_rep =
base_records = cds_migrator_kit.rdm.records.transform.xml_processing.rules.base
publication = cds_migrator_kit.rdm.records.transform.xml_processing.rules.publications
annual_rep = cds_migrator_kit.rdm.records.transform.xml_processing.rules.annual_rep
cds_migrator_kit.migrator.rules.fap =
base = cds_migrator_kit.transform.xml_processing.rules.base
base_records = cds_migrator_kit.rdm.records.transform.xml_processing.rules.base
fap = cds_migrator_kit.rdm.records.transform.xml_processing.rules.fap
cds_migrator_kit.migrator.rules.people =
people = cds_migrator_kit.rdm.users.transform.xml_processing.rules.people
invenio_pidstore.minters =
Expand Down
Loading