diff --git a/metacore/admin.py b/metacore/admin.py index fd747960c4e3cc48a524cdbc3f1d2e5879327566..f92ab10262e9e6bc42cecf2f24cec54eacab1214 100644 --- a/metacore/admin.py +++ b/metacore/admin.py @@ -1,22 +1,22 @@ from django.contrib import admin from django.contrib import messages from .models import Citable, CitableWithDOI, Journal -from .services import get_crossref_test, import_journal_full, get_crossref_work_count +from .services import get_crossref_test, import_journal_full, get_crossref_work_count, add_journal_to_existing # Register your models here. class JournalAdmin(admin.ModelAdmin): fields = ('name', 'ISSN_digital', 'last_full_sync') list_display = ('name', 'ISSN_digital', 'last_full_sync', 'count_metacore', 'count_crossref') - actions = ['import_full', 'update_counts'] + actions = ['import_full', 'update_counts', 'add_journal_to_items'] def import_full(self, request, queryset): """ Starts background task to import all works by this journal """ for journal in queryset: t = import_journal_full(journal.ISSN_digital) - messages.add_message(request, messages.INFO, 'Import task for journal {} added. Go to Background Tasks -> Tasks in admin to view them'.format(journal.name)) + messages.add_message(request, messages.INFO, 'Import task for journal {} added. Go to Background Tasks -> Tasks in admin to view'.format(journal.name)) - messages.add_message(request, messages.WARNING, 'Make sure to start the tasks by running ./manage.py process_tasks') + messages.add_message(request, messages.WARNING, 'Make sure that "./manage.py process_tasks" is running (otherwise start it).') def update_counts(self, request, queryset): for journal in queryset: journal.count_metacore = Citable.objects(metadata__ISSN=journal.ISSN_digital).count() @@ -25,6 +25,13 @@ class JournalAdmin(admin.ModelAdmin): messages.add_message(request, messages.INFO, 'Counts updated.') + def add_journal_to_items(self, request, queryset): + for journal in queryset: + add_journal_to_existing(journal.ISSN_digital) + messages.add_message(request, messages.INFO, '"Add journal" task for journal {} added. Go to Background Tasks -> Tasks in admin to view'.format(journal.name)) + + messages.add_message(request, messages.WARNING, 'Make sure that "./manage.py process_tasks" is running (otherwise start it).') + def get_actions(self, request): actions = super().get_actions(request) if 'delete_selected' in actions: diff --git a/metacore/managers.py b/metacore/managers.py index 64d164bc7da1db675d56a22ce59e7c3f9920e37a..964a910155cb2edc7775397ec358fb24fb856160 100644 --- a/metacore/managers.py +++ b/metacore/managers.py @@ -10,7 +10,7 @@ class CitableQuerySet(QuerySet): return self.only('references').filter(references=dois) def simple(self): - return self.only('doi', 'title', 'authors', 'metadata.is-referenced-by-count', 'publication_date', 'publisher', 'metadata.container-title') + return self.only('doi', 'title', 'authors', 'metadata.is-referenced-by-count', 'publication_date', 'publisher', 'metadata.container-title', 'journal') def prl(self): return self.filter(metadata__ISSN='0031-9007') diff --git a/metacore/services.py b/metacore/services.py index b202791a761e1ef591a261401742e14df5d7cbcc..0d0462df0a86a615723f7776127b294abb53dc47 100644 --- a/metacore/services.py +++ b/metacore/services.py @@ -151,6 +151,30 @@ def convert_doi_to_lower_case(): if i % 1000 == 0: print(i) +@background() +def add_journal_to_existing(journal_issn=None): + # Take journal from metadata ('container-title') and put it in top-level 'journal' field + # for all existing citables + i = 0 + errors = 0 + if journal_issn: + print('Using given journal ISSN ', journal_issn) + cits = Citable.objects(metadata__ISSN=journal_issn, journal__exists=False) + else: + cits = Citable.objects(journal__exists=False) + + for cit in cits.only('metadata', 'journal'): + i = i + 1 + if 'container-title' in cit.metadata: + journal = cit.metadata['container-title'][0] + cit.modify(journal=journal) + else: + errors = errors + 1 + + if i % 1000 == 0: + print(i) + print(errors, ' errors') + print('-------') def parse_crossref_citable(citable_item): if not citable_item['type'] == 'journal-article': diff --git a/metacore/templates/partials/citable_card_content.html b/metacore/templates/partials/citable_card_content.html index e26872a7ec134576a10abe7b3c38c526507369cd..a704cc518f562247491e0df4070fa1215e16b550 100644 --- a/metacore/templates/partials/citable_card_content.html +++ b/metacore/templates/partials/citable_card_content.html @@ -11,10 +11,10 @@ Cited {{ citable.crossref_ref_count }} times (CrossRef) / {{ citable.times_cited}} times (SciPost Meta) | DOI <a href='https://doi.org/{{ citable.doi }}'> {{ citable.doi }} </a> <br> - Published {{ citable.publication_date|date:"d-m-Y" }} by {{ citable.publisher }} + Published {{ citable.publication_date|date:"d-m-Y" }} by <b>{{ citable.publisher }}</b> {% if citable.journal %} - <br> - in {{ citable.journal }} + <!-- <br> --> + in <b>{{ citable.journal }}</b> {% endif %} </p> {% endblock %}