Skip to content

Commit

Permalink
[no ticket] Clean sync dois (#9627)
Browse files Browse the repository at this point in the history
Fixes minor bug preventing dois from syncing.
  • Loading branch information
Johnetordoff committed Mar 1, 2021
1 parent b1f8504 commit 20368f5
Showing 1 changed file with 27 additions and 6 deletions.
33 changes: 27 additions & 6 deletions osf/management/commands/sync_datacite_doi_metadata.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,39 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import time

from django.core.management.base import BaseCommand
from osf.models import Registration
from osf.models import Registration, Identifier
import logging
from datacite.errors import DataCiteForbiddenError
from django.contrib.contenttypes.models import ContentType

logger = logging.getLogger(__name__)

def sync_datacite_doi_metadata(dry_run=True):
for registration in Registration.objects.all():
def sync_datacite_doi_metadata(dry_run=True, retries=4):
content_type = ContentType.objects.get_for_model(Registration)
reg_ids = Identifier.objects.filter(category='doi', content_type=content_type, deleted__isnull=True).values_list(
'object_id',
flat=True
)

registrations = Registration.objects.exclude(id__in=reg_ids)
logger.info(f'{registrations.count()} registrations to mint')
for registration in registrations:
if not dry_run:
doi = registration.request_identifier('doi')
registration.set_identifier_value('doi', doi)
try:
doi = registration.request_identifier('doi')['doi']
registration.set_identifier_value('doi', doi)
except DataCiteForbiddenError as e:
# Just rate limiting, sleep and retry
logger.info(f'retrying for {registration._id}, {retries} retries left')
if retries < 1:
raise e
retries -= 1
time.sleep(10)
sync_datacite_doi_metadata(dry_run, retries)
break

logger.info(f'doi minting for {registration._id} complete')


Expand Down

0 comments on commit 20368f5

Please sign in to comment.