diff --git a/site/zenodo_rdm/openaire/serializers/__init__.py b/site/zenodo_rdm/openaire/serializers/__init__.py index 103ba06a..13331094 100644 --- a/site/zenodo_rdm/openaire/serializers/__init__.py +++ b/site/zenodo_rdm/openaire/serializers/__init__.py @@ -21,5 +21,5 @@ def __init__(self, **options): format_serializer_cls=JSONSerializer, object_schema_cls=OpenAIRESchema, list_schema_cls=BaseListSchema, - **options + **options, ) diff --git a/site/zenodo_rdm/openaire/serializers/schema.py b/site/zenodo_rdm/openaire/serializers/schema.py index fae8a317..2d8d8780 100644 --- a/site/zenodo_rdm/openaire/serializers/schema.py +++ b/site/zenodo_rdm/openaire/serializers/schema.py @@ -6,6 +6,8 @@ # it under the terms of the MIT License; see LICENSE file for more details. """OpenAire schema.""" +from urllib.parse import quote_plus + from invenio_access.permissions import system_identity from invenio_communities.proxies import current_communities from marshmallow import Schema, fields, missing, pre_dump @@ -193,17 +195,14 @@ def _reverse_funder_acronym(funder_ror): funder = grant.get("funder", {}) if funder and award: funder_ror = funder.get("id") - funder_acronym = _reverse_funder_acronym(funder_ror) - award_program = award.get("program", "") - award_number = award.get("number", "") - award_title = award.get("title", {}).get("en") - award_acronym = award.get("acronym", "") + # url-encode the fields + funder_acronym = quote_plus(_reverse_funder_acronym(funder_ror)) + award_program = quote_plus(award.get("program", "")) + award_number = quote_plus(award.get("number", "")) + award_title = quote_plus(award.get("title", {}).get("en", "")) + award_acronym = quote_plus(award.get("acronym", "")) if funder_acronym and award_program and award_number: - b_link = f"info:eu-repo/grantAgreement/{funder_acronym}/{award_program}/{award_number}" - if award_title: - b_link += f"/{award_title}" - if award_acronym: - b_link += f"/{award_acronym}" + b_link = f"info:eu-repo/grantAgreement/{funder_acronym}/{award_program}/{award_number}{award_title}{award_acronym}" links.append(b_link) return links or missing