Skip to content

Commit

Permalink
doi: add configuration variable for record doi
Browse files Browse the repository at this point in the history
* with this it is possible to create doi's for parent and record
  independently.

* this removes the semantically overload of DATACITE_ENABLED

* it adds also the possibility to change from DATACITE to another doi
  provider
  • Loading branch information
utnapischtim committed May 14, 2024
1 parent fc2811a commit 7349ec6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 12 deletions.
11 changes: 10 additions & 1 deletion invenio_rdm_records/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# Copyright (C) 2019-2024 CERN.
# Copyright (C) 2019 Northwestern University.
# Copyright (C) 2021-2023 Graz University of Technology.
# Copyright (C) 2021-2024 Graz University of Technology.
# Copyright (C) 2023 TU Wien.
#
# Invenio-RDM-Records is free software; you can redistribute it and/or modify
Expand Down Expand Up @@ -558,3 +558,12 @@ def lock_edit_published_files(service, identity, record=None):

RDM_DATACITE_FUNDER_IDENTIFIERS_PRIORITY = ("ror", "doi", "grid", "isni", "gnd")
"""Priority of funder identifiers types to be used for DataCite serialization."""

RDM_DOI_PROVIDER_KEY = "DATACITE_ENABLED"
"""Define the doi provider."""

RDM_RECORD_DOI_ENABLED = False
"""Enable/disable doi creation for record."""

RDM_PARENT_DOI_ENABLED = False
"""Enable/disable doi creation for parent."""
4 changes: 2 additions & 2 deletions invenio_rdm_records/services/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,11 +332,11 @@ class RDMRecordServiceConfig(RecordServiceConfig, ConfiguratorMixin):
parent_pids_providers = FromConfigPIDsProviders(
pids_key="RDM_PARENT_PERSISTENT_IDENTIFIERS",
providers_key="RDM_PARENT_PERSISTENT_IDENTIFIER_PROVIDERS",
doi_enabled_cfg_key="PARENT_DOI_ENABLED",
doi_data_record_key="RDM_PARENT_DOI_ENABLED",
)
parent_pids_required = FromConfigRequiredPIDs(
pids_key="RDM_PARENT_PERSISTENT_IDENTIFIERS",
doi_enabled_cfg_key="PARENT_DOI_ENABLED",
doi_data_record_key="RDM_PARENT_DOI_ENABLED",
)
parent_pids_conditional = FromConfigConditionalPIDs(
pids_key="RDM_PARENT_PERSISTENT_IDENTIFIERS",
Expand Down
27 changes: 18 additions & 9 deletions invenio_rdm_records/services/customizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
class FromConfigPIDsProviders:
"""Data descriptor for pid providers configuration."""

def __init__(self, pids_key=None, providers_key=None, doi_enabled_cfg_key=None):
def __init__(self, pids_key=None, providers_key=None, doi_data_record_key=None):
"""Initialize the config descriptor."""
self.pids_key = pids_key or "RDM_PERSISTENT_IDENTIFIERS"
self.providers_key = providers_key or "RDM_PERSISTENT_IDENTIFIER_PROVIDERS"
self.doi_enabled_cfg_key = doi_enabled_cfg_key or "DATACITE_ENABLED"
self.doi_data_record_key = doi_data_record_key or "RDM_RECORD_DOI_ENABLED"
self.doi_provider_key = "RDM_DOI_PROVIDER_KEY"

def __get__(self, obj, objtype=None):
"""Return value that was grafted on obj (descriptor protocol)."""
Expand All @@ -38,9 +39,12 @@ def get_provider_dict(pid_config, pid_providers):

return provider_dict

pids = obj._app.config.get(self.pids_key, {})
providers = {p.name: p for p in obj._app.config.get(self.providers_key, [])}
doi_enabled = obj._app.config.get(self.doi_enabled_cfg_key, False)
get = obj._app.config.get

pids = get(self.pids_key, {})
providers = {p.name: p for p in get(self.providers_key, [])}
doi_provider = get(self.doi_provider_key, None)
doi_enabled = get(self.doi_data_record_key, False) and get(doi_provider, False)

return {
scheme: get_provider_dict(conf, providers)
Expand All @@ -52,15 +56,20 @@ def get_provider_dict(pid_config, pid_providers):
class FromConfigRequiredPIDs:
"""Data descriptor for required pids configuration."""

def __init__(self, pids_key=None, doi_enabled_cfg_key=None):
def __init__(self, pids_key=None, doi_data_record_key=None):
"""Initialize the config descriptor."""
self.pids_key = pids_key or "RDM_PERSISTENT_IDENTIFIERS"
self.doi_enabled_cfg_key = doi_enabled_cfg_key or "DATACITE_ENABLED"
self.doi_data_record_key = doi_data_record_key or "RDM_RECORD_DOI_ENABLED"
self.doi_provider_key = "RDM_DOI_PROVIDER_KEY"

def __get__(self, obj, objtype=None):
"""Return required pids (descriptor protocol)."""
pids = obj._app.config.get(self.pids_key, {})
doi_enabled = obj._app.config.get(self.doi_enabled_cfg_key, False)

get = obj._app.config.get

pids = get(self.pids_key, {})
doi_provider = get(self.doi_provider_key, None)
doi_enabled = get(self.doi_data_record_key, False) and get(doi_provider, False)

pids = {
scheme: conf
Expand Down

0 comments on commit 7349ec6

Please sign in to comment.