From 9dcd33b36060d1ca37cb9674d89e1e961565cede Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org>
Date: Fri, 7 Jan 2022 13:30:44 +0100
Subject: [PATCH] Update journal metrics graphs

---
 scipost_django/journals/views.py | 89 +++++++-------------------------
 1 file changed, 20 insertions(+), 69 deletions(-)

diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py
index 8495bff73..37dad52a2 100644
--- a/scipost_django/journals/views.py
+++ b/scipost_django/journals/views.py
@@ -10,9 +10,10 @@ import string
 import shutil
 import requests
 
-from csp.decorators import csp_update
-from plotly.offline import plot
-from plotly.graph_objs import Bar
+from csp.decorators import csp_update, csp_exempt
+#from plotly.offline import plot
+#from plotly.graph_objs import Bar
+import plotly.graph_objects as pgo
 
 from django.contrib.auth.decorators import login_required
 from django.contrib.contenttypes.models import ContentType
@@ -348,71 +349,16 @@ def about(request, doi_label):
     return render(request, 'journals/about.html', context)
 
 
-def provide_plot(x, y, name):
-    return plot(
-        [ Bar(x=x, y=y, name=name) ],
+def provide_plot(x, y, name, nonce=None):
+    fig = pgo.Figure([ pgo.Bar(x=x, y=y, name=name) ]).to_html(
         config={
             'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d',
                                        'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',],
         },
-        output_type='div', include_plotlyjs=False,
-        show_link=False, link_text="")
-
-
-def metrics_DEPREC(request, doi_label, specialty=None):
-    journal = get_object_or_404(Journal, doi_label=doi_label)
-    publications = journal.get_publications()
-    if specialty:
-        publications = publications.filter(specialties=specialty)
-    context = {
-        'journal': journal,
-        'specialty': specialty,
-    }
-    if not publications:
-        return render(request, 'journals/metrics.html', context)
-    pubyears = [year for year in range(publications.last().publication_date.year, # pubs ordered in -publication_date
-                                       timezone.now().year)]
-    nr_publications = [publications.filter(publication_date__year=year).count() for year in pubyears]
-    nr_citations = [journal.nr_citations(year, specialty) for year in pubyears]
-    citedby_citescore = [journal.citedby_citescore(year, specialty) for year in pubyears]
-    citedby_impact_factor = [journal.citedby_impact_factor(year, specialty) for year in pubyears]
-    nr_publications_plot = plot(
-        [ Bar(x=pubyears, y=nr_publications, name='publications') ],
-        config={
-            'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d',
-                                       'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',],
-        },
-        output_type='div', include_plotlyjs=False,
-        show_link=False, link_text="")
-    nr_citations_plot = plot(
-        [ Bar(x=pubyears, y=nr_citations, name='citations') ],
-        config={
-            'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d',
-                                       'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',],
-        },
-        output_type='div', include_plotlyjs=False,
-        show_link=False, link_text="")
-    citescore_plot = plot(
-        [ Bar(x=pubyears, y=citedby_citescore, name='citescore') ],
-        config={
-            'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d',
-                                       'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',],
-        },
-        output_type='div', include_plotlyjs=False,
-        show_link=False, link_text="")
-    impact_factor_plot = plot(
-        [ Bar(x=pubyears, y=citedby_impact_factor, name='impactfactor') ],
-        config={
-            'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d',
-                                       'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',],
-        },
-        output_type='div', include_plotlyjs=False,
-        show_link=False, link_text="")
-    context['nr_publications_plot'] = nr_publications_plot
-    context['nr_citations_plot'] = nr_citations_plot
-    context['citescore_plot'] = citescore_plot
-    context['impact_factor_plot'] = impact_factor_plot
-    return render(request, 'journals/metrics.html', context)
+        full_html=False, include_plotlyjs=False)
+    if nonce:
+        fig = fig.replace('<script ', f'<script nonce={nonce} ')
+    return fig
 
 
 @csp_update(SCRIPT_SRC=["'unsafe-eval'", "'unsafe-inline'"])
@@ -428,23 +374,28 @@ def metrics(request, doi_label, specialty=None):
     nr_publications_plot = provide_plot(
         x=journal.cf_metrics['nr_publications']['years'],
         y=journal.cf_metrics['nr_publications']['nr_publications'][key],
-        name='publications')
+        name='publications',
+        nonce=request.csp_nonce)
     nr_submissions_plot = provide_plot(
         x=journal.cf_metrics['nr_submissions']['years'],
         y=journal.cf_metrics['nr_submissions']['nr_submissions'][key],
-        name='submissions')
+        name='submissions',
+        nonce=request.csp_nonce)
     nr_citations_plot = provide_plot(
         x=journal.cf_metrics['nr_citations']['years'],
         y=journal.cf_metrics['nr_citations']['nr_citations'][key],
-        name='citations')
+        name='citations',
+        nonce=request.csp_nonce)
     citescore_plot = provide_plot(
         x=journal.cf_metrics['citedby_citescore']['years'],
         y=journal.cf_metrics['citedby_citescore']['citedby_citescore'][key],
-        name='citations')
+        name='citations',
+        nonce=request.csp_nonce)
     impact_factor_plot = provide_plot(
         x=journal.cf_metrics['citedby_impact_factor']['years'],
         y=journal.cf_metrics['citedby_impact_factor']['citedby_impact_factor'][key],
-        name='citations')
+        name='citations',
+        nonce=request.csp_nonce)
     context['nr_publications_plot'] = nr_publications_plot
     context['nr_submissions_plot'] = nr_submissions_plot
     context['nr_citations_plot'] = nr_citations_plot
-- 
GitLab