def test_create_identifiers_not_exists(self): identifier = self.node._id url = furl.furl('https://ezid.cdlib.org/id') doi = settings.EZID_FORMAT.format(namespace=settings.DOI_NAMESPACE, guid=identifier) url.path.segments.append(doi) httpretty.register_uri( httpretty.PUT, url.url, body=to_anvl({ 'success': '{doi}osf.io/{ident} | {ark}osf.io/{ident}'.format( doi=settings.DOI_NAMESPACE, ark=settings.ARK_NAMESPACE, ident=identifier, ), }), status=201, priority=1, ) res = self.app.post( self.node.api_url_for('node_identifiers_post'), auth=self.user.auth, ) self.node.reload() assert_equal( res.json['doi'], self.node.get_identifier_value('doi') ) assert_equal( res.json['ark'], self.node.get_identifier_value('ark') ) assert_equal(res.status_code, 201)
def test_create_identifiers_exists(self): identifier = self.node._id doi = settings.EZID_FORMAT.format(namespace=settings.DOI_NAMESPACE, guid=identifier) url = furl.furl('https://ezid.cdlib.org/id') url.path.segments.append(doi) httpretty.register_uri( httpretty.PUT, url.url, body='identifier already exists', status=400, ) httpretty.register_uri( httpretty.GET, url.url, body=to_anvl({ 'success': doi, }), status=200, ) res = self.app.post( self.node.api_url_for('node_identifiers_post'), auth=self.user.auth, ) self.node.reload() assert_equal( res.json['doi'], self.node.get_identifier_value('doi') ) assert_equal( res.json['ark'], self.node.get_identifier_value('ark') ) assert_equal(res.status_code, 201)
def test_create_identifiers_exists_ezid(self): guid = self.registration._id doi = settings.DOI_FORMAT.format(prefix=settings.EZID_DOI_NAMESPACE, guid=guid).replace('doi:', '') url = furl.furl(self.client.base_url) url.path.segments += ['id', doi] responses.add( responses.Response( responses.PUT, url.url, body='identifier already exists', status=400, ) ) responses.add( responses.Response( responses.GET, url.url, body=to_anvl({ 'success': doi, }), status=200, ) ) with mock.patch('osf.models.Registration.get_doi_client') as mock_get_doi: mock_get_doi.return_value = self.client res = self.app.post( self.registration.api_url_for('node_identifiers_post'), auth=self.user.auth, ) self.registration.reload() assert_equal( res.json['doi'], self.registration.get_identifier_value('doi') ) assert_equal(res.status_code, 201)
def update_identifier(self, object, category): metadata = self.build_metadata(object) status = self.get_status(object) metadata['_status'] = status identifier = self.build_doi(object) resp = self._make_request( 'POST', self._build_url('id', identifier), data=utils.to_anvl(metadata or {}), expects=(200, ), ) return utils.from_anvl(resp.content)
def update_identifier(self, object, category): if not waffle.switch_is_active(EZID_SWITCH): logger.info('ezid waffle switch is off. Doing nothing...') return None metadata = self.build_metadata(object) status = self.get_status(object) metadata['_status'] = status identifier = self.build_doi(object) resp = self._make_request( 'POST', self._build_url('id', identifier), data=utils.to_anvl(metadata or {}), expects=(200, ), ) return utils.from_anvl(resp.content)
def update_identifier(self, object, category): if not waffle.switch_is_active(features.EZID_SWITCH): logger.info('ezid waffle switch is off. Doing nothing...') return None metadata = self.build_metadata(object) status = self.get_status(object) metadata['_status'] = status identifier = self.build_doi(object) resp = self._make_request( 'POST', self._build_url('id', identifier), data=utils.to_anvl(metadata or {}), expects=(200, ), ) return utils.from_anvl(resp.content)
def create_identifier(self, object, category): if category in ['doi', 'ark']: metadata = self.build_metadata(object) doi = self.build_doi(object) resp = requests.request( 'PUT', self._build_url('id', doi), data=utils.to_anvl(metadata or {}), ) if resp.status_code != 201: if 'identifier already exists' in resp.content: raise exceptions.IdentifierAlreadyExists() else: raise exceptions.ClientResponseError(resp) resp = utils.from_anvl(resp.content) return dict( [each.strip('/') for each in pair.strip().split(':')] for pair in resp['success'].split('|') ) else: raise NotImplementedError('Create identifier method is not supported for category {}'.format(category))