class DataCitePidProvider(PidProvider): """ DOI provider using DataCite API. """ pid_type = 'doi' def __init__(self): self.api = DataCite() def _get_url(self, kwargs): try: return kwargs['url'] except KeyError: raise Exception("url keyword argument must be specified.") def _get_doc(self, kwargs): try: return kwargs['doc'] except KeyError: raise Exception("doc keyword argument must be specified.") def reserve(self, pid, *args, **kwargs): """ Reserve a DOI (amounts to upload metadata, but not to mint) """ # Only registered PIDs can be updated. doc = self._get_doc(kwargs) try: self.api.metadata_post(doc) except DataCiteError, e: pid.log("RESERVE", "Failed with %s" % e.__class__.__name__) return False except HttpError, e: pid.log("RESERVE", "Failed with HttpError - %s" % unicode(e)) return False
def __init__(self): self.api = DataCite()