Skip to content

Commit 3268ba0

Browse files
committed
Add new task to update node metadata with verified_links
1 parent b98ecce commit 3268ba0

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

osf/metadata/serializers/datacite/datacite_tree_walker.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def walk(self, doi_override=None):
113113
self._visit_rights(self.root)
114114
self._visit_descriptions(self.root, self.basket.focus.iri)
115115
self._visit_funding_references(self.root)
116+
self._visit_verified_links(self.root)
116117
self._visit_related(self.root)
117118

118119
def _visit_identifier(self, parent_el, *, doi_override=None):
@@ -432,3 +433,18 @@ def _get_resource_type_general(self, focus_iri):
432433
if isinstance(type_term, rdflib.URIRef) and type_term.startswith(DATACITE):
433434
return without_namespace(type_term, DATACITE)
434435
return 'Text'
436+
437+
def _visit_verified_links(self, parent_el):
438+
verified_links = getattr(self.basket.focus.osf_item, 'verified_links', None)
439+
440+
if verified_links and isinstance(verified_links, list):
441+
related_identifiers_el = self.visit(parent_el, 'relatedIdentifiers', is_list=True)
442+
443+
for link in verified_links:
444+
if link and isinstance(link, str) and smells_like_iri(link):
445+
self.visit(related_identifiers_el, 'relatedIdentifier', text=link, attrib={
446+
'relatedIdentifierType': 'URL',
447+
'relationType': 'IsReferencedBy',
448+
})
449+
else:
450+
logger.warning('skipping non-URL verified link "%s"', link)

website/identifiers/tasks.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,34 @@ def task__update_doi_metadata_on_change(self, target_guid):
1717
@celery_app.task(ignore_results=True)
1818
def update_doi_metadata_on_change(target_guid):
1919
task__update_doi_metadata_on_change(target_guid)
20+
21+
@celery_app.task(bind=True, max_retries=5, acks_late=True)
22+
def task__update_doi_metadata_with_verified_links(self, target_guid, verified_links=None):
23+
sentry.log_message('Updating DOI with verified links for guid',
24+
extra_data={'guid': target_guid, 'verified_links': verified_links},
25+
level=logging.INFO)
26+
27+
Guid = apps.get_model('osf.Guid')
28+
target_object = Guid.load(target_guid).referent
29+
30+
if target_object.get_identifier('doi'):
31+
if verified_links:
32+
target_object.verified_links = verified_links
33+
34+
target_object.request_identifier_update(category='doi')
35+
36+
if verified_links and hasattr(target_object, 'verified_links'):
37+
delattr(target_object, 'verified_links')
38+
39+
sentry.log_message('DOI metadata with verified links updated for guid',
40+
extra_data={'guid': target_guid},
41+
level=logging.INFO)
42+
else:
43+
sentry.log_message('No DOI found for guid, skipping update',
44+
extra_data={'guid': target_guid},
45+
level=logging.INFO)
46+
47+
@queued_task
48+
@celery_app.task(ignore_results=True)
49+
def update_doi_metadata_with_verified_links(target_guid, verified_links=None):
50+
task__update_doi_metadata_with_verified_links(target_guid, verified_links)

0 commit comments

Comments
 (0)