#!/usr/bin/python
# -*- coding: utf-8 -*-
"""CherryPy DOI Registration Updater object class."""
from __future__ import print_function
from pacifica.metadata.orm import DOIEntries, DOIInfo
from pacifica.metadata.orm.utils import datetime_now_nomicrosecond
# pylint: disable=too-few-public-methods
[docs]class DOIRegistrationBase(object):
"""Base class for DOI registration functionality."""
[docs] @staticmethod
def make_doi_entry_info(doi_string, doi_info, creator, status='pending', released=False):
"""Update or create DOI entries."""
site_url = doi_info.get('site_url')
lookup_item = {
'doi': doi_string
}
insert_item = {
'status': status,
'released': released,
'site_url': site_url,
'creator': creator
}
doi_entry, _created = DOIEntries.get_or_create(
defaults=insert_item, **lookup_item)
DOIRegistrationBase._update_doi_metadata_info(doi_info, doi_string)
return doi_entry, _created
[docs] @staticmethod
def change_doi_entry_info(doi_string, doi_info, status='pending', released=False):
"""Update or create DOI entries."""
doi_entry = DOIEntries.get(DOIEntries.doi == doi_string)
insert_item = {
'status': status,
'released': released
}
doi_entry.from_hash(insert_item)
doi_entry.updated = datetime_now_nomicrosecond()
doi_entry.save(only=doi_entry.dirty_fields)
DOIRegistrationBase._update_doi_metadata_info(doi_info, doi_string)
return doi_entry
[docs] @staticmethod
def _check_doi_info_for_change(item_to_check, value):
if item_to_check.value != value:
item_to_check.value = value
item_to_check.updated = datetime_now_nomicrosecond()
return item_to_check