示例#1
0
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
示例#2
0
 def __init__(self):
     self.api = DataCite()