From 3c72612582de27011e298e3b35c64ec23222e040 Mon Sep 17 00:00:00 2001 From: Alex Ioannidis Date: Wed, 29 Nov 2023 15:53:23 +0100 Subject: [PATCH] legacy: fix contributor roles mapping --- .../legacy/serializers/schemas/common.py | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/site/zenodo_rdm/legacy/serializers/schemas/common.py b/site/zenodo_rdm/legacy/serializers/schemas/common.py index 527d5bf0..6408453b 100644 --- a/site/zenodo_rdm/legacy/serializers/schemas/common.py +++ b/site/zenodo_rdm/legacy/serializers/schemas/common.py @@ -14,12 +14,6 @@ from zenodo_legacy.funders import FUNDER_ACRONYMS, FUNDER_ROR_TO_DOI from zenodo_legacy.licenses import rdm_to_legacy - -def to_camel_case(string, split_char=" "): - """Returns a camel cased string.""" - return "".join(word.title() for word in string.split(split_char)) - - # Maps RDM relation_type to legacy relation RELATION_TYPE_MAPPING = { "iscitedby": "isCitedBy", @@ -59,6 +53,31 @@ def to_camel_case(string, split_char=" "): "isalternateidentifier": "isAlternateIdentifier", } +# Maps RDM creator/contributor roles to legacy roles +ROLE_TYPE_MAPPING = { + "contactperson": "ContactPerson", + "datacollector": "DataCollector", + "datacurator": "DataCurator", + "datamanager": "DataManager", + "distributor": "Distributor", + "editor": "Editor", + "hostinginstitution": "HostingInstitution", + "producer": "Producer", + "projectleader": "ProjectLeader", + "projectmanager": "ProjectManager", + "projectmember": "ProjectMember", + "registrationagency": "RegistrationAgency", + "registrationauthority": "RegistrationAuthority", + "relatedperson": "RelatedPerson", + "researcher": "Researcher", + "researchgroup": "ResearchGroup", + "rightsholder": "RightsHolder", + "sponsor": "Sponsor", + "supervisor": "Supervisor", + "workpackageleader": "WorkPackageLeader", + "other": "Other", +} + class CreatorSchema(Schema): """Creator schema.""" @@ -96,9 +115,8 @@ def dump_role(self, obj): """Loads role field.""" # English title matches DataCite prop, used in legacy Zenodo role = obj.get("role", {}) - if role: - title_en = role.get("title", {}).get("en") - return to_camel_case(title_en, " ") + if role and role.get("id") in ROLE_TYPE_MAPPING: + return ROLE_TYPE_MAPPING[role["id"]] class DateSchema(Schema):