diff --git a/docs/admin/_build/doctrees/environment.pickle b/docs/admin/_build/doctrees/environment.pickle
index d3f4d0db6311ffec074c19122183a87a5f4f70fa..0c9b67dc6ce5bd09cda83e241c52c78098064d3e 100644
Binary files a/docs/admin/_build/doctrees/environment.pickle and b/docs/admin/_build/doctrees/environment.pickle differ
diff --git a/docs/admin/_build/doctrees/foundation.doctree b/docs/admin/_build/doctrees/foundation.doctree
index 9cb04fc62cd6ba7e16353ec4e2abf087f4ac010c..fbe819e078adfbfe7d20a5c0d93d8c18778f4a8c 100644
Binary files a/docs/admin/_build/doctrees/foundation.doctree and b/docs/admin/_build/doctrees/foundation.doctree differ
diff --git a/docs/admin/_build/doctrees/index.doctree b/docs/admin/_build/doctrees/index.doctree
index 077e54afed6f14d7baf08a7d87e5e41e5dca4176..dbde81f4d441e28b4c7fb5bdf66692f86f6563cc 100644
Binary files a/docs/admin/_build/doctrees/index.doctree and b/docs/admin/_build/doctrees/index.doctree differ
diff --git a/docs/admin/_build/json/environment.pickle b/docs/admin/_build/json/environment.pickle
index d3f4d0db6311ffec074c19122183a87a5f4f70fa..0c9b67dc6ce5bd09cda83e241c52c78098064d3e 100644
Binary files a/docs/admin/_build/json/environment.pickle and b/docs/admin/_build/json/environment.pickle differ
diff --git a/docs/admin/_build/json/foundation.fjson b/docs/admin/_build/json/foundation.fjson
index f0358b1f59cc41572240217f2bd9daf17b101ca3..b37300c1693f6c6f8bff12b424cb8ff17d17e68a 100644
--- a/docs/admin/_build/json/foundation.fjson
+++ b/docs/admin/_build/json/foundation.fjson
@@ -1 +1 @@
-{"toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Stichting SciPost</a><ul>\n<li><a class=\"reference internal\" href=\"#history\">History</a></li>\n</ul>\n</li>\n</ul>\n", "rellinks": [["genindex", "General Index", "I", "index"], ["index", "SciPost Admin documentation", "P", "previous"]], "sourcename": "foundation.txt", "metatags": "", "body": "<div class=\"section\" id=\"stichting-scipost\">\n<h1>Stichting SciPost<a class=\"headerlink\" href=\"#stichting-scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"history\">\n<h2>History<a class=\"headerlink\" href=\"#history\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "parents": [], "page_source_suffix": ".rst", "current_page_name": "foundation", "prev": {"link": "../", "title": "SciPost Admin documentation"}, "display_toc": true, "meta": {}, "next": null, "sidebars": null, "alabaster_version": "0.7.10", "customsidebar": null, "title": "Stichting SciPost"}
\ No newline at end of file
+{"meta": {}, "parents": [], "sourcename": "foundation.txt", "display_toc": true, "body": "<div class=\"section\" id=\"stichting-scipost\">\n<h1>Stichting SciPost<a class=\"headerlink\" href=\"#stichting-scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"history\">\n<h2>History<a class=\"headerlink\" href=\"#history\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "next": null, "current_page_name": "foundation", "title": "Stichting SciPost", "sidebars": null, "metatags": "", "customsidebar": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Stichting SciPost</a><ul>\n<li><a class=\"reference internal\" href=\"#history\">History</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "prev": {"title": "SciPost Admin documentation", "link": "../"}, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["index", "SciPost Admin documentation", "P", "previous"]]}
\ No newline at end of file
diff --git a/docs/admin/_build/json/genindex.fjson b/docs/admin/_build/json/genindex.fjson
index fe5cc567e838f06a7abe58f4fb0c20594df02266..7747de9c037143813efc1c5fd5533df696fdda0a 100644
--- a/docs/admin/_build/json/genindex.fjson
+++ b/docs/admin/_build/json/genindex.fjson
@@ -1 +1 @@
-{"sidebars": null, "genindexentries": [], "genindexcounts": [], "current_page_name": "genindex", "customsidebar": null, "split_index": false, "alabaster_version": "0.7.10"}
\ No newline at end of file
+{"genindexentries": [], "sidebars": null, "split_index": false, "genindexcounts": [], "current_page_name": "genindex", "customsidebar": null, "alabaster_version": "0.7.10"}
\ No newline at end of file
diff --git a/docs/admin/_build/json/index.fjson b/docs/admin/_build/json/index.fjson
index 2f201825ccde882f932e144ca3c65f4e68d9e9b4..a061b3fd5b141dbdf9d8b724414bea08a5252269 100644
--- a/docs/admin/_build/json/index.fjson
+++ b/docs/admin/_build/json/index.fjson
@@ -1 +1 @@
-{"toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">SciPost Admin documentation</a></li>\n</ul>\n", "rellinks": [["genindex", "General Index", "I", "index"], ["foundation", "Stichting SciPost", "N", "next"]], "sourcename": "index.txt", "metatags": "", "body": "<div class=\"section\" id=\"scipost-admin-documentation\">\n<h1>SciPost Admin documentation<a class=\"headerlink\" href=\"#scipost-admin-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"foundation/\">Stichting SciPost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"foundation/#history\">History</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "parents": [], "page_source_suffix": ".rst", "current_page_name": "index", "prev": null, "display_toc": false, "meta": {}, "next": {"link": "foundation/", "title": "Stichting SciPost"}, "sidebars": null, "alabaster_version": "0.7.10", "customsidebar": null, "title": "SciPost Admin documentation"}
\ No newline at end of file
+{"meta": {}, "parents": [], "sourcename": "index.txt", "display_toc": false, "body": "<div class=\"section\" id=\"scipost-admin-documentation\">\n<h1>SciPost Admin documentation<a class=\"headerlink\" href=\"#scipost-admin-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"foundation/\">Stichting SciPost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"foundation/#history\">History</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "next": {"title": "Stichting SciPost", "link": "foundation/"}, "current_page_name": "index", "title": "SciPost Admin documentation", "sidebars": null, "metatags": "", "customsidebar": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">SciPost Admin documentation</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "prev": null, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["foundation", "Stichting SciPost", "N", "next"]]}
\ No newline at end of file
diff --git a/docs/admin/_build/json/search.fjson b/docs/admin/_build/json/search.fjson
index 680740b419f3c7df165cf872b67efd1e278014a9..18633afd7d7e9ba67f56977e85f55f626c1440f0 100644
--- a/docs/admin/_build/json/search.fjson
+++ b/docs/admin/_build/json/search.fjson
@@ -1 +1 @@
-{"current_page_name": "search", "sidebars": null, "alabaster_version": "0.7.10", "customsidebar": null}
\ No newline at end of file
+{"sidebars": null, "alabaster_version": "0.7.10", "current_page_name": "search", "customsidebar": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/doctrees/apps.doctree b/docs/codebase/_build/doctrees/apps.doctree
index fddb68d07d93655e60a8217546dad47d000240f1..ff317aedfd2b7d0cee0b2195ef2b20d53c733826 100644
Binary files a/docs/codebase/_build/doctrees/apps.doctree and b/docs/codebase/_build/doctrees/apps.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/commentaries.doctree b/docs/codebase/_build/doctrees/apps/commentaries.doctree
index 05f7343a6f0579886f24f01d651166e0158b723c..129bbdf8522b837ea2f9de115a5032b31a3cd577 100644
Binary files a/docs/codebase/_build/doctrees/apps/commentaries.doctree and b/docs/codebase/_build/doctrees/apps/commentaries.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/comments.doctree b/docs/codebase/_build/doctrees/apps/comments.doctree
index 6d8c8d5cfd8728871a76a56a6da32f72c560020c..39c8390f328671647f126c2e8ccb6f93de5a8dfd 100644
Binary files a/docs/codebase/_build/doctrees/apps/comments.doctree and b/docs/codebase/_build/doctrees/apps/comments.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/journals.doctree b/docs/codebase/_build/doctrees/apps/journals.doctree
index dde5a3c31aee6b866ebcd8c629e61665c6d2487e..8ec2843e8d981d4215f6526f83af586384afa81c 100644
Binary files a/docs/codebase/_build/doctrees/apps/journals.doctree and b/docs/codebase/_build/doctrees/apps/journals.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/scipost.doctree b/docs/codebase/_build/doctrees/apps/scipost.doctree
index d9a90f90806d2459fe1370c54f5fa1a1c4098fd8..93cb8cb7206043d27908d64a136dfe766419c113 100644
Binary files a/docs/codebase/_build/doctrees/apps/scipost.doctree and b/docs/codebase/_build/doctrees/apps/scipost.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/submissions.doctree b/docs/codebase/_build/doctrees/apps/submissions.doctree
index facb1f265c7da91affac6b13e0f4d35b356493b6..e4c1a6e6b8cdecf784f880b24e189c2a295dbc47 100644
Binary files a/docs/codebase/_build/doctrees/apps/submissions.doctree and b/docs/codebase/_build/doctrees/apps/submissions.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/theses.doctree b/docs/codebase/_build/doctrees/apps/theses.doctree
index fe11e6a0792d390fc70086adab6da6003560d566..6df0f6e7d48550603bba6aa4689f441f66ccb0f4 100644
Binary files a/docs/codebase/_build/doctrees/apps/theses.doctree and b/docs/codebase/_build/doctrees/apps/theses.doctree differ
diff --git a/docs/codebase/_build/doctrees/environment.pickle b/docs/codebase/_build/doctrees/environment.pickle
index dca504247c14e8c00723956af63278e7c6a42420..3a216e7c1e34f45e2b7de010516855ce8377ea65 100644
Binary files a/docs/codebase/_build/doctrees/environment.pickle and b/docs/codebase/_build/doctrees/environment.pickle differ
diff --git a/docs/codebase/_build/doctrees/index.doctree b/docs/codebase/_build/doctrees/index.doctree
index 7c9888ec4674b12cfcf41d540f6e27e32dc03a32..13c3b6d910f597e8a6159e8634f92a5ea48aa034 100644
Binary files a/docs/codebase/_build/doctrees/index.doctree and b/docs/codebase/_build/doctrees/index.doctree differ
diff --git a/docs/codebase/_build/doctrees/maintenance.doctree b/docs/codebase/_build/doctrees/maintenance.doctree
index ac521bf860458565d20e5a152bcc329c093255e1..6aa9fc131d130af86238a004064416773dbfee8c 100644
Binary files a/docs/codebase/_build/doctrees/maintenance.doctree and b/docs/codebase/_build/doctrees/maintenance.doctree differ
diff --git a/docs/codebase/_build/doctrees/maintenance/docs.doctree b/docs/codebase/_build/doctrees/maintenance/docs.doctree
index 0da309dc4a721b2e3dfdb8dbfbb0bfea579ac845..d8da40f9db880c02c1a506d332d0f017dc86718d 100644
Binary files a/docs/codebase/_build/doctrees/maintenance/docs.doctree and b/docs/codebase/_build/doctrees/maintenance/docs.doctree differ
diff --git a/docs/codebase/_build/json/_modules/commentaries/models.fjson b/docs/codebase/_build/json/_modules/commentaries/models.fjson
index 8af0f1aadac957492b6ab92c8fd7f56c1f16e1a8..fa956d0faaf5883f00f54044723588cd01d08c79 100644
--- a/docs/codebase/_build/json/_modules/commentaries/models.fjson
+++ b/docs/codebase/_build/json/_modules/commentaries/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/commentaries/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for commentaries.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentaryManager</span>\n\n\n<div class=\"viewcode-block\" id=\"Commentary\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Commentary</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Commentary contains all the contents of a SciPost Commentary page for a given publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENTARY_TYPES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span>\n                                  <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Article/publication data</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;arXiv identifier (including version nr)&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI of the original publication&#39;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI link to the original publication&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;string form of arxiv nr or&#39;</span>\n                                                        <span class=\"s1\">&#39; DOI for commentary url&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">scipost_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pages</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of original publication&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Commentary</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentaryManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Commentaries&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">,))</span>\n\n<div class=\"viewcode-block\" id=\"Commentary.parse_links_into_urls\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">parse_links_into_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Takes the arXiv nr or DOI and turns it into the urls &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://dx.doi.org/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;arXiv:&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://arxiv.org/abs/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">commit</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div></div>\n</pre></div>", "sidebars": null, "title": "commentaries.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for commentaries.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentaryManager</span>\n\n\n<div class=\"viewcode-block\" id=\"Commentary\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Commentary</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Commentary contains all the contents of a SciPost Commentary page for a given publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENTARY_TYPES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span>\n                                  <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Article/publication data</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;arXiv identifier (including version nr)&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI of the original publication&#39;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI link to the original publication&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;string form of arxiv nr or&#39;</span>\n                                                        <span class=\"s1\">&#39; DOI for commentary url&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">scipost_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pages</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of original publication&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Commentary</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentaryManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Commentaries&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">,))</span>\n\n<div class=\"viewcode-block\" id=\"Commentary.parse_links_into_urls\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">parse_links_into_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Takes the arXiv nr or DOI and turns it into the urls &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://dx.doi.org/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;arXiv:&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://arxiv.org/abs/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">commit</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/commentaries/models", "title": "commentaries.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/commentaries/views.fjson b/docs/codebase/_build/json/_modules/commentaries/views.fjson
index c368a71fadd9f0b300fcbc2cde81db0107a533b6..d7feea67187b7ef64ac8799df9869937df888d17 100644
--- a/docs/codebase/_build/json/_modules/commentaries/views.fjson
+++ b/docs/codebase/_build/json/_modules/commentaries/views.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/commentaries/views", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for commentaries.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.loader</span> <span class=\"k\">import</span> <span class=\"n\">render_to_string</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">,</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">,</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentarySearchForm</span><span class=\"p\">,</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">,</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentSciPostPublication</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">request_commentary</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_commentary.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestCommentary</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestPublishedArticle</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestArxivPreprint</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_DOI</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># The form checks if doi is valid and commentary doesn&#39;t already exist.</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_published_article_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_doi_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"vet_commentary_requests\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.vet_commentary_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_commentary_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Show the first commentary thats awaiting vetting&quot;&quot;&quot;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">commentary_id</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Security fix: Smart asses can vet their own commentary without this line.</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Get commentary</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_commentary</span><span class=\"p\">()</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"c1\"># Retrieve email_template for action</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_accepted</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_accepted.html&#39;</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_refused</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_rejected.html&#39;</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_refusal_reason</span><span class=\"p\">()</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;further_explanation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_modified</span><span class=\"p\">():</span>\n            <span class=\"c1\"># For a modified commentary, redirect to request_commentary_form</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:modify_commentary_request&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,)))</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"n\">email_context</span><span class=\"p\">)</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_commentary</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_to_vet</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/vet_commentary_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"modify_commentary_request\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.modify_commentary_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">modify_commentary_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Modify a commentary request after vetting with status &#39;modified&#39;.&quot;&quot;&quot;</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                    <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)),</span>\n                                    <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Process commentary data</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_modified.html&#39;</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">})</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request modified and vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/modify_commentary_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">CommentaryListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentarySearchForm</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n    <span class=\"n\">context_object_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentary_list&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Perform search form here already to get the right pagination numbers.&#39;&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Get newest comments</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;comment_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"n\">field</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">):</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">commentary_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">):</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_or_DOI_string</span><span class=\"o\">=</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">status__gte</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/commentary_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"comment_on_publication\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.comment_on_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">comment_on_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This will let authors of an SciPost publication comment on their Publication by</span>\n<span class=\"sd\">    automatically creating a Commentary page if not exist already.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(),</span>\n                                    <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentSciPostPublication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                     <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/comment_on_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n</pre></div>", "sidebars": null, "title": "commentaries.views"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for commentaries.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.loader</span> <span class=\"k\">import</span> <span class=\"n\">render_to_string</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">,</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">,</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentarySearchForm</span><span class=\"p\">,</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">,</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentSciPostPublication</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">request_commentary</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_commentary.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestCommentary</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestPublishedArticle</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestArxivPreprint</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_DOI</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># The form checks if doi is valid and commentary doesn&#39;t already exist.</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_published_article_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_doi_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"vet_commentary_requests\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.vet_commentary_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_commentary_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Show the first commentary thats awaiting vetting&quot;&quot;&quot;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">commentary_id</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Security fix: Smart asses can vet their own commentary without this line.</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Get commentary</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_commentary</span><span class=\"p\">()</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"c1\"># Retrieve email_template for action</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_accepted</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_accepted.html&#39;</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_refused</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_rejected.html&#39;</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_refusal_reason</span><span class=\"p\">()</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;further_explanation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_modified</span><span class=\"p\">():</span>\n            <span class=\"c1\"># For a modified commentary, redirect to request_commentary_form</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:modify_commentary_request&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,)))</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"n\">email_context</span><span class=\"p\">)</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_commentary</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_to_vet</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/vet_commentary_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"modify_commentary_request\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.modify_commentary_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">modify_commentary_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Modify a commentary request after vetting with status &#39;modified&#39;.&quot;&quot;&quot;</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                    <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)),</span>\n                                    <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Process commentary data</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_modified.html&#39;</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">})</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request modified and vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/modify_commentary_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">CommentaryListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentarySearchForm</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n    <span class=\"n\">context_object_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentary_list&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Perform search form here already to get the right pagination numbers.&#39;&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Get newest comments</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;comment_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"n\">field</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">):</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">commentary_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">):</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_or_DOI_string</span><span class=\"o\">=</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">status__gte</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/commentary_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"comment_on_publication\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.comment_on_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">comment_on_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This will let authors of an SciPost publication comment on their Publication by</span>\n<span class=\"sd\">    automatically creating a Commentary page if not exist already.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(),</span>\n                                    <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentSciPostPublication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                     <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/comment_on_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/commentaries/views", "title": "commentaries.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/comments/models.fjson b/docs/codebase/_build/json/_modules/comments/models.fjson
index e693ad4d360933f9f73a4355fab8fd378346aced..b1f2fada7eb277eeaf3d6a9e6f50db3e3997ae56 100644
--- a/docs/codebase/_build/json/_modules/comments/models.fjson
+++ b/docs/codebase/_build/json/_modules/comments/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/comments/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for comments.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">,</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_PUBLISHED</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENT_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PENDING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentQuerySet</span>\n\n\n<span class=\"n\">WARNING_TEXT</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: Rather use/edit `content_object` instead or be 100</span><span class=\"si\">% s</span><span class=\"s1\">ure you know what you are doing!&#39;</span>\n<span class=\"n\">US_NOTICE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: This field is out of service and will be removed in the future.&#39;</span>\n\n\n<div class=\"viewcode-block\" id=\"Comment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; A Comment is an unsollicited note, submitted by a Contributor,</span>\n<span class=\"sd\">    on a particular publication or in reply to an earlier Comment. &quot;&quot;&quot;</span>\n\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PENDING</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENT_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comment_vetted_by&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">file_attachment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;uploads/comments/%Y/%m/</span><span class=\"si\">%d</span><span class=\"s1\">/&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span><span class=\"p\">]</span>\n                                       <span class=\"p\">)</span>\n\n    <span class=\"c1\"># A Comment is always related to another model</span>\n    <span class=\"c1\"># This construction implicitly has property: `on_delete=models.CASCADE`</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n\n    <span class=\"n\">nested_comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># -- U/S</span>\n    <span class=\"c1\"># These fields will be removed in the future.</span>\n    <span class=\"c1\"># They still exists only to prevent possible data loss.</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments_old&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_comment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;nested_comments_old&quot;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Report&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"c1\"># -- End U/S</span>\n\n    <span class=\"c1\"># Author info</span>\n    <span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Categories:</span>\n    <span class=\"n\">is_cor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;correction/erratum&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rem</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_que</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_ans</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;answer to question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_obj</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rep</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reply to objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_val</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;validation or rederivation&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_lit</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pointer to related literature&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_sug</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;suggestion for further work&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">comment_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Opinions</span>\n    <span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_agreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_agreement&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_notsure</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_notsure&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_disagreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_disagreement&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">permissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Can vet submitted Comments&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comment_text</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">title</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">core_content_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n        <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">)</span> <span class=\"ow\">or</span>\n               <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">)):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Comment</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Nested Comment.</span>\n                <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">Exception</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Comment.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;#&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#comment_id&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_attachment_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:attachment&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">grant_permissions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Add permissions for EIC only, the Vetting-group already has it!</span>\n            <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author_str\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author_str\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author string, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_author</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Anonymous&#39;</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">update_opinions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;N&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;D&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Comment relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"o\">==</span> <span class=\"n\">COMMENTARY_PUBLISHED</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;post-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reviewer-external&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Author Replies, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Comments, &#39;</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n</pre></div>", "sidebars": null, "title": "comments.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for comments.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">,</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_PUBLISHED</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENT_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PENDING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentQuerySet</span>\n\n\n<span class=\"n\">WARNING_TEXT</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: Rather use/edit `content_object` instead or be 100</span><span class=\"si\">% s</span><span class=\"s1\">ure you know what you are doing!&#39;</span>\n<span class=\"n\">US_NOTICE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: This field is out of service and will be removed in the future.&#39;</span>\n\n\n<div class=\"viewcode-block\" id=\"Comment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; A Comment is an unsollicited note, submitted by a Contributor,</span>\n<span class=\"sd\">    on a particular publication or in reply to an earlier Comment. &quot;&quot;&quot;</span>\n\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PENDING</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENT_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comment_vetted_by&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">file_attachment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;uploads/comments/%Y/%m/</span><span class=\"si\">%d</span><span class=\"s1\">/&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span><span class=\"p\">]</span>\n                                       <span class=\"p\">)</span>\n\n    <span class=\"c1\"># A Comment is always related to another model</span>\n    <span class=\"c1\"># This construction implicitly has property: `on_delete=models.CASCADE`</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n\n    <span class=\"n\">nested_comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># -- U/S</span>\n    <span class=\"c1\"># These fields will be removed in the future.</span>\n    <span class=\"c1\"># They still exists only to prevent possible data loss.</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments_old&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_comment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;nested_comments_old&quot;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Report&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"c1\"># -- End U/S</span>\n\n    <span class=\"c1\"># Author info</span>\n    <span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Categories:</span>\n    <span class=\"n\">is_cor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;correction/erratum&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rem</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_que</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_ans</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;answer to question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_obj</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rep</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reply to objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_val</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;validation or rederivation&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_lit</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pointer to related literature&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_sug</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;suggestion for further work&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">comment_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Opinions</span>\n    <span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_agreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_agreement&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_notsure</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_notsure&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_disagreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_disagreement&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">permissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Can vet submitted Comments&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comment_text</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">title</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">core_content_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n        <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">)</span> <span class=\"ow\">or</span>\n               <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">)):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Comment</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Nested Comment.</span>\n                <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">Exception</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Comment.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;#&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#comment_id&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_attachment_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:attachment&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">grant_permissions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Add permissions for EIC only, the Vetting-group already has it!</span>\n            <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author_str\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author_str\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author string, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_author</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Anonymous&#39;</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">update_opinions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;N&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;D&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Comment relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"o\">==</span> <span class=\"n\">COMMENTARY_PUBLISHED</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;post-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reviewer-external&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Author Replies, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Comments, &#39;</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/comments/models", "title": "comments.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/comments/views.fjson b/docs/codebase/_build/json/_modules/comments/views.fjson
index ec6de8b6b1addad14da7d10a798d28e9a6ce8cb9..a48ba2a73fa98d7049fb3ba74bcee523bfe000d2 100644
--- a/docs/codebase/_build/json/_modules/comments/views.fjson
+++ b/docs/codebase/_build/json/_modules/comments/views.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/comments/views", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for comments.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span><span class=\"p\">,</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_objects_for_user</span>\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">CommentUtils</span><span class=\"p\">,</span> <span class=\"n\">validate_file_extention</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">new_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;object_id&quot;</span><span class=\"p\">])</span>\n        <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;type_of_object&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;thesislink&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;submission&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n            <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new comment has been added.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;commentary&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n        <span class=\"n\">new_comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">_object</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_submit_comment</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/add_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comments_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">comments_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comments_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Method `get_objects_for_user` gets all Comments that are assigned to the user</span>\n    <span class=\"c1\"># or *all* comments if user has the `scipost.can_vet_comments` permission.</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">get_objects_for_user</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()),</span>\n                                <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Accept the comment as is</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_accepted_to_author</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Update `latest_activity` fields</span>\n            <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to related Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;2&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The comment request is simply rejected</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"k\">if</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>  <span class=\"c1\"># Why&#39;s this here??</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_rejected_to_author</span><span class=\"p\">(</span>\n                <span class=\"n\">email_response</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add event if commented to Submission</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Submitted Comment vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Redirect vetters back to check for other unvetted comments!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:vet_submitted_comments_list&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">related_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ThesisLink</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># No idea what this could be, but just to be sure</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_report_comment</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">report</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_express_opinion_on_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">express_opinion</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n    <span class=\"c1\"># A contributor has expressed an opinion on a comment</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">update_opinions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<div class=\"viewcode-block\" id=\"attachment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.views.attachment\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">attachment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Open/read attachment of Comment if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">file_attachment</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;image/jpeg&#39;</span>\n    <span class=\"k\">elif</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;application/pdf&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">content_type</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;comment-attachment-</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">name</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n</pre></div>", "sidebars": null, "title": "comments.views"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for comments.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span><span class=\"p\">,</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_objects_for_user</span>\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">CommentUtils</span><span class=\"p\">,</span> <span class=\"n\">validate_file_extention</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">new_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;object_id&quot;</span><span class=\"p\">])</span>\n        <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;type_of_object&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;thesislink&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;submission&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n            <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new comment has been added.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;commentary&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n        <span class=\"n\">new_comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">_object</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_submit_comment</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/add_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comments_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">comments_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comments_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Method `get_objects_for_user` gets all Comments that are assigned to the user</span>\n    <span class=\"c1\"># or *all* comments if user has the `scipost.can_vet_comments` permission.</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">get_objects_for_user</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()),</span>\n                                <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Accept the comment as is</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_accepted_to_author</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Update `latest_activity` fields</span>\n            <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to related Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;2&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The comment request is simply rejected</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"k\">if</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>  <span class=\"c1\"># Why&#39;s this here??</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_rejected_to_author</span><span class=\"p\">(</span>\n                <span class=\"n\">email_response</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add event if commented to Submission</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Submitted Comment vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Redirect vetters back to check for other unvetted comments!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:vet_submitted_comments_list&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">related_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ThesisLink</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># No idea what this could be, but just to be sure</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_report_comment</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">report</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_express_opinion_on_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">express_opinion</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n    <span class=\"c1\"># A contributor has expressed an opinion on a comment</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">update_opinions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<div class=\"viewcode-block\" id=\"attachment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.views.attachment\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">attachment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Open/read attachment of Comment if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">file_attachment</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;image/jpeg&#39;</span>\n    <span class=\"k\">elif</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;application/pdf&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">content_type</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;comment-attachment-</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">name</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/comments/views", "title": "comments.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/django/utils/functional.fjson b/docs/codebase/_build/json/_modules/django/utils/functional.fjson
index 239e46dfddf611f7d7b9483af33a781a75d2c3f0..7e41eeaa0fe074fc2f8531e305eef2397e060187 100644
--- a/docs/codebase/_build/json/_modules/django/utils/functional.fjson
+++ b/docs/codebase/_build/json/_modules/django/utils/functional.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/django/utils/functional", "customsidebar": null, "parents": [{"link": "../../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for django.utils.functional</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">copy</span>\n<span class=\"kn\">import</span> <span class=\"nn\">operator</span>\n<span class=\"kn\">import</span> <span class=\"nn\">warnings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">functools</span> <span class=\"k\">import</span> <span class=\"n\">total_ordering</span><span class=\"p\">,</span> <span class=\"n\">wraps</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">six</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.deprecation</span> <span class=\"k\">import</span> <span class=\"n\">RemovedInDjango20Warning</span>\n\n\n<span class=\"c1\"># You can&#39;t trivially replace this with `functools.partial` because this binds</span>\n<span class=\"c1\"># to classes and returns bound instances, whereas functools.partial (on</span>\n<span class=\"c1\"># CPython) is a type and its instances don&#39;t bind.</span>\n<span class=\"k\">def</span> <span class=\"nf\">curry</span><span class=\"p\">(</span><span class=\"n\">_curried_func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_curried</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">moreargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_curried_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">args</span> <span class=\"o\">+</span> <span class=\"n\">moreargs</span><span class=\"p\">),</span> <span class=\"o\">**</span><span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">_curried</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">cached_property</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Decorator that converts a method with a single self argument into a</span>\n<span class=\"sd\">    property cached on the instance.</span>\n\n<span class=\"sd\">    Optional ``name`` argument allows you to make cached properties of other</span>\n<span class=\"sd\">    methods. (e.g.  url = cached_property(get_absolute_url, name=&#39;url&#39;) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__doc__</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"s1\">&#39;__doc__&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span> <span class=\"ow\">or</span> <span class=\"n\">func</span><span class=\"o\">.</span><span class=\"vm\">__name__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__get__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"p\">,</span> <span class=\"bp\">cls</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">instance</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n        <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">res</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Promise</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This is just a base class for the proxy class created in</span>\n<span class=\"sd\">    the closure of the lazy function. It can be used to recognize</span>\n<span class=\"sd\">    promises in code.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Turns any callable into a lazy evaluated callable. You need to give result</span>\n<span class=\"sd\">    classes or types -- at least one is needed so that the automatic forcing of</span>\n<span class=\"sd\">    the lazy evaluation code is triggered. Results are not memoized; the</span>\n<span class=\"sd\">    function is evaluated on every access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@total_ordering</span>\n    <span class=\"k\">class</span> <span class=\"nc\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">Promise</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Encapsulate a function call and act as a proxy for methods that are</span>\n<span class=\"sd\">        called on the result of that function. The function is not evaluated</span>\n<span class=\"sd\">        until one of the methods on the result is called.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span> <span class=\"o\">=</span> <span class=\"n\">args</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span> <span class=\"o\">=</span> <span class=\"n\">kw</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepare_class__</span><span class=\"p\">()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span>\n                <span class=\"n\">_lazy_proxy_unpickle</span><span class=\"p\">,</span>\n                <span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">resultclasses</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__prepare_class__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">resultclass</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">type_</span> <span class=\"ow\">in</span> <span class=\"n\">resultclass</span><span class=\"o\">.</span><span class=\"n\">mro</span><span class=\"p\">():</span>\n                    <span class=\"k\">for</span> <span class=\"n\">method_name</span> <span class=\"ow\">in</span> <span class=\"n\">type_</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n                        <span class=\"c1\"># All __promise__ return the same wrapper method, they</span>\n                        <span class=\"c1\"># look up the correct implementation when called.</span>\n                        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n                            <span class=\"k\">continue</span>\n                        <span class=\"n\">meth</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__promise__</span><span class=\"p\">(</span><span class=\"n\">method_name</span><span class=\"p\">)</span>\n                        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">,</span> <span class=\"n\">meth</span><span class=\"p\">)</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"o\">=</span> <span class=\"nb\">bytes</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span> <span class=\"o\">=</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"k\">assert</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">),</span> <span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Cannot call lazy() with both bytes and text return types.&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast_encoded</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__promise__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Builds a wrapper around some magic method</span>\n            <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Automatically triggers the evaluation of a lazy value and</span>\n                <span class=\"c1\"># applies the given magic method of the result type.</span>\n                <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__text_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">))</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast_encoded</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"c1\"># object defines __str__(), so __prepare_class__() won&#39;t overload</span>\n            <span class=\"c1\"># a __str__() method from the proxied class.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__ne__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">!=</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__eq__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__lt__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">&lt;</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__hash__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">hash</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__mod__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY2</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Instances of this class are effectively immutable. It&#39;s just a</span>\n            <span class=\"c1\"># collection of functions. So we don&#39;t need to do anything</span>\n            <span class=\"c1\"># complicated for copying.</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Creates the proxy object, instead of the actual value.</span>\n        <span class=\"k\">return</span> <span class=\"n\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_lazy_proxy_unpickle</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazystr</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Shortcut for the common case of a lazy callable that returns str.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"kn\">from</span> <span class=\"nn\">django.utils.encoding</span> <span class=\"k\">import</span> <span class=\"n\">force_text</span>  <span class=\"c1\"># Avoid circular import</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">force_text</span><span class=\"p\">,</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">allow_lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;django.utils.functional.allow_lazy() is deprecated in favor of &quot;</span>\n        <span class=\"s2\">&quot;django.utils.functional.keep_lazy()&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">RemovedInDjango20Warning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator that allows a function to be called with one or more lazy</span>\n<span class=\"sd\">    arguments. If none of the args are lazy, the function is evaluated</span>\n<span class=\"sd\">    immediately, otherwise a __proxy__ is returned that will evaluate the</span>\n<span class=\"sd\">    function when needed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;You must pass at least one argument to keep_lazy().&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">decorator</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"n\">lazy_func</span> <span class=\"o\">=</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)</span>\n\n        <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">arg</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">itervalues</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">)):</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">arg</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                    <span class=\"k\">break</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">lazy_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span>\n    <span class=\"k\">return</span> <span class=\"n\">decorator</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy_text</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator for functions that accept lazy arguments and return text.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">empty</span> <span class=\"o\">=</span> <span class=\"nb\">object</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">inner</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">inner</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">LazyObject</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A wrapper for another class that can be used to delay instantiation of the</span>\n<span class=\"sd\">    wrapped class.</span>\n\n<span class=\"sd\">    By subclassing, you have the opportunity to intercept and alter the</span>\n<span class=\"sd\">    instantiation. If you don&#39;t need to do that, use SimpleLazyObject.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># Avoid infinite recursion when tracing __init__ (#19456).</span>\n    <span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Note: if a subclass overrides __init__(), it will likely need to</span>\n        <span class=\"c1\"># override __copy__() and __deepcopy__() as well.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"n\">empty</span>\n\n    <span class=\"fm\">__getattr__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">getattr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__setattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Assign to __dict__ to avoid infinite __setattr__ loops.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">value</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n            <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__delattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;can&#39;t delete _wrapped.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"nb\">delattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Must be implemented by subclasses to initialize the wrapped object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s1\">&#39;subclasses of LazyObject must provide a _setup() method&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Because we have messed with __class__ below, we confuse pickle as to what</span>\n    <span class=\"c1\"># class we are pickling. We&#39;re going to have to initialize the wrapped</span>\n    <span class=\"c1\"># object to successfully pickle it, so we might as well just pickle the</span>\n    <span class=\"c1\"># wrapped object since they&#39;re supposed to act the same way.</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># Unfortunately, if we try to simply act like the wrapped object, the ruse</span>\n    <span class=\"c1\"># will break down when pickle gets our id(). Thus we end up with pickle</span>\n    <span class=\"c1\"># thinking, in effect, that we are a distinct object from the wrapped</span>\n    <span class=\"c1\"># object, but with the same __dict__. This can cause problems (see #25389).</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># So instead, we define our own __reduce__ method and custom unpickler. We</span>\n    <span class=\"c1\"># pickle the wrapped object as the unpickler&#39;s argument, so that pickle</span>\n    <span class=\"c1\"># will pickle it normally, and then the unpickler simply returns its</span>\n    <span class=\"c1\"># argument.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">unpickle_lazyobject</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,))</span>\n\n    <span class=\"c1\"># Overriding __class__ stops __reduce__ from being called on Python 2.</span>\n    <span class=\"c1\"># So, define __getstate__ in a way that cooperates with the way that</span>\n    <span class=\"c1\"># pickle interprets this class. This fails when the wrapped class is a</span>\n    <span class=\"c1\"># builtin, but it&#39;s better than nothing.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getstate__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use type(self), not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use type(self), not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n        <span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bytes</span><span class=\"p\">)</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"fm\">__bool__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">unicode</span><span class=\"p\">)</span>  <span class=\"c1\"># NOQA: unicode undefined on PY3</span>\n        <span class=\"n\">__nonzero__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Introspection support</span>\n    <span class=\"fm\">__dir__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">dir</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Need to pretend to be the wrapped class, for the sake of objects that</span>\n    <span class=\"c1\"># care about this (especially in equality tests)</span>\n    <span class=\"vm\">__class__</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">attrgetter</span><span class=\"p\">(</span><span class=\"s2\">&quot;__class__&quot;</span><span class=\"p\">)))</span>\n    <span class=\"fm\">__eq__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">)</span>\n    <span class=\"fm\">__ne__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">ne</span><span class=\"p\">)</span>\n    <span class=\"fm\">__hash__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">hash</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># List/Tuple/Dictionary methods support</span>\n    <span class=\"fm\">__getitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">getitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__setitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">setitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__delitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">delitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__iter__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">)</span>\n    <span class=\"fm\">__len__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">)</span>\n    <span class=\"fm\">__contains__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">unpickle_lazyobject</span><span class=\"p\">(</span><span class=\"n\">wrapped</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Used to unpickle lazy objects. Just return its argument, which will be the</span>\n<span class=\"sd\">    wrapped object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">wrapped</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"n\">LazyObject</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A lazy object initialized from any function.</span>\n\n<span class=\"sd\">    Designed for compound objects of unknown type. For builtins or objects of</span>\n<span class=\"sd\">    known type, use django.utils.functional.lazy.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Pass in a callable that returns the object to be wrapped.</span>\n\n<span class=\"sd\">        If copies are made of the resulting SimpleLazyObject, which can happen</span>\n<span class=\"sd\">        in various circumstances within Django, then you must ensure that the</span>\n<span class=\"sd\">        callable can be safely run more than once and will return the same</span>\n<span class=\"sd\">        value.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s1\">&#39;_setupfunc&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SimpleLazyObject</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Return a meaningful representation of the lazy object for debugging</span>\n    <span class=\"c1\"># without evaluating the wrapped object.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%r</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">repr_attr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use SimpleLazyObject, not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use SimpleLazyObject, not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">partition</span><span class=\"p\">(</span><span class=\"n\">predicate</span><span class=\"p\">,</span> <span class=\"n\">values</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Splits the values into two sets, based on the return value of the function</span>\n<span class=\"sd\">    (True/False). e.g.:</span>\n\n<span class=\"sd\">        &gt;&gt;&gt; partition(lambda x: x &gt; 3, range(5))</span>\n<span class=\"sd\">        [0, 1, 2, 3], [4]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"p\">([],</span> <span class=\"p\">[])</span>\n    <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">values</span><span class=\"p\">:</span>\n        <span class=\"n\">results</span><span class=\"p\">[</span><span class=\"n\">predicate</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">results</span>\n</pre></div>", "sidebars": null, "title": "django.utils.functional"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for django.utils.functional</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">copy</span>\n<span class=\"kn\">import</span> <span class=\"nn\">operator</span>\n<span class=\"kn\">import</span> <span class=\"nn\">warnings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">functools</span> <span class=\"k\">import</span> <span class=\"n\">total_ordering</span><span class=\"p\">,</span> <span class=\"n\">wraps</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">six</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.deprecation</span> <span class=\"k\">import</span> <span class=\"n\">RemovedInDjango20Warning</span>\n\n\n<span class=\"c1\"># You can&#39;t trivially replace this with `functools.partial` because this binds</span>\n<span class=\"c1\"># to classes and returns bound instances, whereas functools.partial (on</span>\n<span class=\"c1\"># CPython) is a type and its instances don&#39;t bind.</span>\n<span class=\"k\">def</span> <span class=\"nf\">curry</span><span class=\"p\">(</span><span class=\"n\">_curried_func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_curried</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">moreargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_curried_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">args</span> <span class=\"o\">+</span> <span class=\"n\">moreargs</span><span class=\"p\">),</span> <span class=\"o\">**</span><span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">_curried</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">cached_property</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Decorator that converts a method with a single self argument into a</span>\n<span class=\"sd\">    property cached on the instance.</span>\n\n<span class=\"sd\">    Optional ``name`` argument allows you to make cached properties of other</span>\n<span class=\"sd\">    methods. (e.g.  url = cached_property(get_absolute_url, name=&#39;url&#39;) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__doc__</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"s1\">&#39;__doc__&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span> <span class=\"ow\">or</span> <span class=\"n\">func</span><span class=\"o\">.</span><span class=\"vm\">__name__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__get__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"p\">,</span> <span class=\"bp\">cls</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">instance</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n        <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">res</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Promise</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This is just a base class for the proxy class created in</span>\n<span class=\"sd\">    the closure of the lazy function. It can be used to recognize</span>\n<span class=\"sd\">    promises in code.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Turns any callable into a lazy evaluated callable. You need to give result</span>\n<span class=\"sd\">    classes or types -- at least one is needed so that the automatic forcing of</span>\n<span class=\"sd\">    the lazy evaluation code is triggered. Results are not memoized; the</span>\n<span class=\"sd\">    function is evaluated on every access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@total_ordering</span>\n    <span class=\"k\">class</span> <span class=\"nc\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">Promise</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Encapsulate a function call and act as a proxy for methods that are</span>\n<span class=\"sd\">        called on the result of that function. The function is not evaluated</span>\n<span class=\"sd\">        until one of the methods on the result is called.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span> <span class=\"o\">=</span> <span class=\"n\">args</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span> <span class=\"o\">=</span> <span class=\"n\">kw</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepare_class__</span><span class=\"p\">()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span>\n                <span class=\"n\">_lazy_proxy_unpickle</span><span class=\"p\">,</span>\n                <span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">resultclasses</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__prepare_class__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">resultclass</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">type_</span> <span class=\"ow\">in</span> <span class=\"n\">resultclass</span><span class=\"o\">.</span><span class=\"n\">mro</span><span class=\"p\">():</span>\n                    <span class=\"k\">for</span> <span class=\"n\">method_name</span> <span class=\"ow\">in</span> <span class=\"n\">type_</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n                        <span class=\"c1\"># All __promise__ return the same wrapper method, they</span>\n                        <span class=\"c1\"># look up the correct implementation when called.</span>\n                        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n                            <span class=\"k\">continue</span>\n                        <span class=\"n\">meth</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__promise__</span><span class=\"p\">(</span><span class=\"n\">method_name</span><span class=\"p\">)</span>\n                        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">,</span> <span class=\"n\">meth</span><span class=\"p\">)</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"o\">=</span> <span class=\"nb\">bytes</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span> <span class=\"o\">=</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"k\">assert</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">),</span> <span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Cannot call lazy() with both bytes and text return types.&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast_encoded</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__promise__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Builds a wrapper around some magic method</span>\n            <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Automatically triggers the evaluation of a lazy value and</span>\n                <span class=\"c1\"># applies the given magic method of the result type.</span>\n                <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__text_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">))</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast_encoded</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"c1\"># object defines __str__(), so __prepare_class__() won&#39;t overload</span>\n            <span class=\"c1\"># a __str__() method from the proxied class.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__ne__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">!=</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__eq__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__lt__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">&lt;</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__hash__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">hash</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__mod__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY2</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Instances of this class are effectively immutable. It&#39;s just a</span>\n            <span class=\"c1\"># collection of functions. So we don&#39;t need to do anything</span>\n            <span class=\"c1\"># complicated for copying.</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Creates the proxy object, instead of the actual value.</span>\n        <span class=\"k\">return</span> <span class=\"n\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_lazy_proxy_unpickle</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazystr</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Shortcut for the common case of a lazy callable that returns str.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"kn\">from</span> <span class=\"nn\">django.utils.encoding</span> <span class=\"k\">import</span> <span class=\"n\">force_text</span>  <span class=\"c1\"># Avoid circular import</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">force_text</span><span class=\"p\">,</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">allow_lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;django.utils.functional.allow_lazy() is deprecated in favor of &quot;</span>\n        <span class=\"s2\">&quot;django.utils.functional.keep_lazy()&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">RemovedInDjango20Warning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator that allows a function to be called with one or more lazy</span>\n<span class=\"sd\">    arguments. If none of the args are lazy, the function is evaluated</span>\n<span class=\"sd\">    immediately, otherwise a __proxy__ is returned that will evaluate the</span>\n<span class=\"sd\">    function when needed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;You must pass at least one argument to keep_lazy().&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">decorator</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"n\">lazy_func</span> <span class=\"o\">=</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)</span>\n\n        <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">arg</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">itervalues</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">)):</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">arg</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                    <span class=\"k\">break</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">lazy_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span>\n    <span class=\"k\">return</span> <span class=\"n\">decorator</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy_text</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator for functions that accept lazy arguments and return text.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">empty</span> <span class=\"o\">=</span> <span class=\"nb\">object</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">inner</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">inner</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">LazyObject</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A wrapper for another class that can be used to delay instantiation of the</span>\n<span class=\"sd\">    wrapped class.</span>\n\n<span class=\"sd\">    By subclassing, you have the opportunity to intercept and alter the</span>\n<span class=\"sd\">    instantiation. If you don&#39;t need to do that, use SimpleLazyObject.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># Avoid infinite recursion when tracing __init__ (#19456).</span>\n    <span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Note: if a subclass overrides __init__(), it will likely need to</span>\n        <span class=\"c1\"># override __copy__() and __deepcopy__() as well.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"n\">empty</span>\n\n    <span class=\"fm\">__getattr__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">getattr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__setattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Assign to __dict__ to avoid infinite __setattr__ loops.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">value</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n            <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__delattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;can&#39;t delete _wrapped.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"nb\">delattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Must be implemented by subclasses to initialize the wrapped object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s1\">&#39;subclasses of LazyObject must provide a _setup() method&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Because we have messed with __class__ below, we confuse pickle as to what</span>\n    <span class=\"c1\"># class we are pickling. We&#39;re going to have to initialize the wrapped</span>\n    <span class=\"c1\"># object to successfully pickle it, so we might as well just pickle the</span>\n    <span class=\"c1\"># wrapped object since they&#39;re supposed to act the same way.</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># Unfortunately, if we try to simply act like the wrapped object, the ruse</span>\n    <span class=\"c1\"># will break down when pickle gets our id(). Thus we end up with pickle</span>\n    <span class=\"c1\"># thinking, in effect, that we are a distinct object from the wrapped</span>\n    <span class=\"c1\"># object, but with the same __dict__. This can cause problems (see #25389).</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># So instead, we define our own __reduce__ method and custom unpickler. We</span>\n    <span class=\"c1\"># pickle the wrapped object as the unpickler&#39;s argument, so that pickle</span>\n    <span class=\"c1\"># will pickle it normally, and then the unpickler simply returns its</span>\n    <span class=\"c1\"># argument.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">unpickle_lazyobject</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,))</span>\n\n    <span class=\"c1\"># Overriding __class__ stops __reduce__ from being called on Python 2.</span>\n    <span class=\"c1\"># So, define __getstate__ in a way that cooperates with the way that</span>\n    <span class=\"c1\"># pickle interprets this class. This fails when the wrapped class is a</span>\n    <span class=\"c1\"># builtin, but it&#39;s better than nothing.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getstate__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use type(self), not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use type(self), not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n        <span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bytes</span><span class=\"p\">)</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"fm\">__bool__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">unicode</span><span class=\"p\">)</span>  <span class=\"c1\"># NOQA: unicode undefined on PY3</span>\n        <span class=\"n\">__nonzero__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Introspection support</span>\n    <span class=\"fm\">__dir__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">dir</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Need to pretend to be the wrapped class, for the sake of objects that</span>\n    <span class=\"c1\"># care about this (especially in equality tests)</span>\n    <span class=\"vm\">__class__</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">attrgetter</span><span class=\"p\">(</span><span class=\"s2\">&quot;__class__&quot;</span><span class=\"p\">)))</span>\n    <span class=\"fm\">__eq__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">)</span>\n    <span class=\"fm\">__ne__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">ne</span><span class=\"p\">)</span>\n    <span class=\"fm\">__hash__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">hash</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># List/Tuple/Dictionary methods support</span>\n    <span class=\"fm\">__getitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">getitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__setitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">setitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__delitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">delitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__iter__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">)</span>\n    <span class=\"fm\">__len__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">)</span>\n    <span class=\"fm\">__contains__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">unpickle_lazyobject</span><span class=\"p\">(</span><span class=\"n\">wrapped</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Used to unpickle lazy objects. Just return its argument, which will be the</span>\n<span class=\"sd\">    wrapped object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">wrapped</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"n\">LazyObject</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A lazy object initialized from any function.</span>\n\n<span class=\"sd\">    Designed for compound objects of unknown type. For builtins or objects of</span>\n<span class=\"sd\">    known type, use django.utils.functional.lazy.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Pass in a callable that returns the object to be wrapped.</span>\n\n<span class=\"sd\">        If copies are made of the resulting SimpleLazyObject, which can happen</span>\n<span class=\"sd\">        in various circumstances within Django, then you must ensure that the</span>\n<span class=\"sd\">        callable can be safely run more than once and will return the same</span>\n<span class=\"sd\">        value.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s1\">&#39;_setupfunc&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SimpleLazyObject</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Return a meaningful representation of the lazy object for debugging</span>\n    <span class=\"c1\"># without evaluating the wrapped object.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%r</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">repr_attr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use SimpleLazyObject, not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use SimpleLazyObject, not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">partition</span><span class=\"p\">(</span><span class=\"n\">predicate</span><span class=\"p\">,</span> <span class=\"n\">values</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Splits the values into two sets, based on the return value of the function</span>\n<span class=\"sd\">    (True/False). e.g.:</span>\n\n<span class=\"sd\">        &gt;&gt;&gt; partition(lambda x: x &gt; 3, range(5))</span>\n<span class=\"sd\">        [0, 1, 2, 3], [4]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"p\">([],</span> <span class=\"p\">[])</span>\n    <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">values</span><span class=\"p\">:</span>\n        <span class=\"n\">results</span><span class=\"p\">[</span><span class=\"n\">predicate</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">results</span>\n</pre></div>", "parents": [{"link": "../../../", "title": "Module code"}], "current_page_name": "_modules/django/utils/functional", "title": "django.utils.functional", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/index.fjson b/docs/codebase/_build/json/_modules/index.fjson
index e074ba1c4ce2d0096afd331d5f5d0c1472985070..edc5a8165b41af1945f05a99f93e09409355f161 100644
--- a/docs/codebase/_build/json/_modules/index.fjson
+++ b/docs/codebase/_build/json/_modules/index.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/index", "customsidebar": null, "alabaster_version": "0.7.10", "body": "<h1>All modules for which code is available</h1>\n<ul><li><a href=\"commentaries/models/\">commentaries.models</a></li>\n<li><a href=\"commentaries/views/\">commentaries.views</a></li>\n<li><a href=\"comments/models/\">comments.models</a></li>\n<li><a href=\"comments/views/\">comments.views</a></li>\n<li><a href=\"django/utils/functional/\">django.utils.functional</a></li>\n<li><a href=\"journals/models/\">journals.models</a></li>\n<li><a href=\"journals/views/\">journals.views</a></li>\n<li><a href=\"scipost/models/\">scipost.models</a></li>\n<li><a href=\"scipost/views/\">scipost.views</a></li>\n<li><a href=\"submissions/models/\">submissions.models</a></li>\n<li><a href=\"submissions/views/\">submissions.views</a></li>\n<li><a href=\"theses/models/\">theses.models</a></li>\n</ul>", "sidebars": null, "title": "Overview: module code"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>All modules for which code is available</h1>\n<ul><li><a href=\"commentaries/models/\">commentaries.models</a></li>\n<li><a href=\"commentaries/views/\">commentaries.views</a></li>\n<li><a href=\"comments/models/\">comments.models</a></li>\n<li><a href=\"comments/views/\">comments.views</a></li>\n<li><a href=\"django/utils/functional/\">django.utils.functional</a></li>\n<li><a href=\"journals/models/\">journals.models</a></li>\n<li><a href=\"journals/views/\">journals.views</a></li>\n<li><a href=\"scipost/models/\">scipost.models</a></li>\n<li><a href=\"scipost/views/\">scipost.views</a></li>\n<li><a href=\"submissions/models/\">submissions.models</a></li>\n<li><a href=\"submissions/views/\">submissions.views</a></li>\n<li><a href=\"theses/models/\">theses.models</a></li>\n</ul>", "current_page_name": "_modules/index", "title": "Overview: module code", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/journals/models.fjson b/docs/codebase/_build/json/_modules/journals/models.fjson
index b416bce62d1e48e344b1f13d86981d2a0073f625..6a118507c92f8c93dadd9b24fda27e7a97a72cb3 100644
--- a/docs/codebase/_build/json/_modules/journals/models.fjson
+++ b/docs/codebase/_build/json/_modules/journals/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/journals/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for journals.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">doi_journal_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_volume_validator</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">doi_issue_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_publication_validator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">,</span> <span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CCBY4</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES_URI</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">journal_name_abbrev_citation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">IssueManager</span><span class=\"p\">,</span> <span class=\"n\">PublicationQuerySet</span><span class=\"p\">,</span> <span class=\"n\">JournalManager</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Journals etc #</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"UnregisteredAuthor\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.UnregisteredAuthor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnregisteredAuthor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PublicationAuthorsTable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.PublicationAuthorsTable\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PublicationAuthorsTable</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;order&#39;</span><span class=\"p\">,)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">last_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">last_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Journal\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Journal</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_journal_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">issn</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;2542-4653&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">JournalManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:landing_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_abbreviation_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">journal_name_abbrev_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Journal.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Volume\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Volume</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Journal&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_volume_validator</span><span class=\"p\">])</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_journal&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; Vol. &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Volume.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span> <span class=\"o\">/</span> <span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Issue\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Issue</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Volume&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_issue_validator</span><span class=\"p\">])</span>\n    <span class=\"c1\"># absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">IssueManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_volume&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">issue_number</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;proceedings&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">text</span>\n        <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">period_as_string</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (In draft)&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:issue_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">issue_number</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">short_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Vol. </span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">period_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">month</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">month</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39; (</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;-&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n                    <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_current</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"o\">&lt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"ow\">and</span>\\\n               <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span> <span class=\"o\">&gt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Issue.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Publication</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Publication is an object directly related to an accepted Submission. It contains metadata,</span>\n<span class=\"sd\">    the actual publication file, author data, etc. etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Publication data</span>\n    <span class=\"n\">accepted_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">in_issue</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Issue&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Core fields</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">pdf_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/PUBLICATIONS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors</span>\n    <span class=\"n\">authors_registered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">),</span>\n                                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_unregistered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span>\n                                                    <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span>\n                                                    <span class=\"s1\">&#39;unregistered_author&#39;</span><span class=\"p\">),</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_publications&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">cc_license</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CCBY4</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Funders</span>\n    <span class=\"n\">grants</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;funders.Grant&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">funders_generic</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;funders.Funder&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># not linked to a grant</span>\n    <span class=\"n\">institutions</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;affiliations.Institution&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>  <span class=\"c1\"># for Crossref deposit</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_publication_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Date fields</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PublicationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span>\n                  <span class=\"o\">+</span> <span class=\"s1\">&#39;, published &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:publication_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_cc_license_URI</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">val</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">CC_LICENSES_URI</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cc_license</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">val</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">KeyError</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_paper_nr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Publication.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n            <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n            <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"mi\">0</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Reference\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Reference\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Reference</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Refence is a reference used in a specific Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reference_number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">)</span>\n    <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;references&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;[</span><span class=\"si\">{}</span><span class=\"s1\">] </span><span class=\"si\">{}</span><span class=\"s1\">, </span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reference_number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Deposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Deposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each time a Crossref deposit is made for a Publication,</span>\n<span class=\"sd\">    a Deposit object instance is created containing the Publication&#39;s</span>\n<span class=\"sd\">    current version of the metadata_xml field.</span>\n<span class=\"sd\">    All deposit history is thus contained here.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"p\">:</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> for &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-%D&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span></div>\n\n\n<div class=\"viewcode-block\" id=\"DOAJDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.DOAJDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    For the Directory of Open Access Journals.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;DOAJ deposit&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;DOAJ deposit for &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"GenericDOIDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.GenericDOIDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Instances of this class represent Crossref deposits for non-publication</span>\n<span class=\"sd\">    objects such as Reports, Comments etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;GenericDOIDeposit for </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">))</span></div>\n</pre></div>", "sidebars": null, "title": "journals.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for journals.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">doi_journal_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_volume_validator</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">doi_issue_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_publication_validator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">,</span> <span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CCBY4</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES_URI</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">journal_name_abbrev_citation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">IssueManager</span><span class=\"p\">,</span> <span class=\"n\">PublicationQuerySet</span><span class=\"p\">,</span> <span class=\"n\">JournalManager</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Journals etc #</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"UnregisteredAuthor\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.UnregisteredAuthor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnregisteredAuthor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PublicationAuthorsTable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.PublicationAuthorsTable\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PublicationAuthorsTable</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;order&#39;</span><span class=\"p\">,)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">last_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">last_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Journal\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Journal</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_journal_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">issn</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;2542-4653&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">JournalManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:landing_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_abbreviation_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">journal_name_abbrev_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Journal.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Volume\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Volume</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Journal&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_volume_validator</span><span class=\"p\">])</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_journal&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; Vol. &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Volume.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span> <span class=\"o\">/</span> <span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Issue\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Issue</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Volume&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_issue_validator</span><span class=\"p\">])</span>\n    <span class=\"c1\"># absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">IssueManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_volume&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">issue_number</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;proceedings&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">text</span>\n        <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">period_as_string</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (In draft)&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:issue_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">issue_number</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">short_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Vol. </span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">period_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">month</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">month</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39; (</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;-&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n                    <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_current</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"o\">&lt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"ow\">and</span>\\\n               <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span> <span class=\"o\">&gt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Issue.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Publication</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Publication is an object directly related to an accepted Submission. It contains metadata,</span>\n<span class=\"sd\">    the actual publication file, author data, etc. etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Publication data</span>\n    <span class=\"n\">accepted_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">in_issue</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Issue&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Core fields</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">pdf_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/PUBLICATIONS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors</span>\n    <span class=\"n\">authors_registered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">),</span>\n                                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_unregistered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span>\n                                                    <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span>\n                                                    <span class=\"s1\">&#39;unregistered_author&#39;</span><span class=\"p\">),</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_publications&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">cc_license</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CCBY4</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Funders</span>\n    <span class=\"n\">grants</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;funders.Grant&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">funders_generic</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;funders.Funder&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># not linked to a grant</span>\n    <span class=\"n\">institutions</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;affiliations.Institution&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>  <span class=\"c1\"># for Crossref deposit</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_publication_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Date fields</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PublicationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span>\n                  <span class=\"o\">+</span> <span class=\"s1\">&#39;, published &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:publication_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_cc_license_URI</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">val</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">CC_LICENSES_URI</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cc_license</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">val</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">KeyError</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_paper_nr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Publication.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n            <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n            <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"mi\">0</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Reference\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Reference\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Reference</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Refence is a reference used in a specific Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reference_number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">)</span>\n    <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;references&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;[</span><span class=\"si\">{}</span><span class=\"s1\">] </span><span class=\"si\">{}</span><span class=\"s1\">, </span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reference_number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Deposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Deposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each time a Crossref deposit is made for a Publication,</span>\n<span class=\"sd\">    a Deposit object instance is created containing the Publication&#39;s</span>\n<span class=\"sd\">    current version of the metadata_xml field.</span>\n<span class=\"sd\">    All deposit history is thus contained here.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"p\">:</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> for &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-%D&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span></div>\n\n\n<div class=\"viewcode-block\" id=\"DOAJDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.DOAJDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    For the Directory of Open Access Journals.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;DOAJ deposit&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;DOAJ deposit for &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"GenericDOIDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.GenericDOIDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Instances of this class represent Crossref deposits for non-publication</span>\n<span class=\"sd\">    objects such as Reports, Comments etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;GenericDOIDeposit for </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">))</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/journals/models", "title": "journals.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/journals/views.fjson b/docs/codebase/_build/json/_modules/journals/views.fjson
index 41e17fa65df0a5f137e5b01ce88e4c8646995ace..44c2e8a799500e37d4b7cbc30852f6d8c0cc36c9 100644
--- a/docs/codebase/_build/json/_modules/journals/views.fjson
+++ b/docs/codebase/_build/json/_modules/journals/views.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/journals/views", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for journals.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">requests</span>\n<span class=\"kn\">import</span> <span class=\"nn\">shutil</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">xml.etree.ElementTree</span> <span class=\"k\">as</span> <span class=\"nn\">ET</span>\n\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span><span class=\"p\">,</span> <span class=\"n\">EmptyPage</span><span class=\"p\">,</span> <span class=\"n\">PageNotAnInteger</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PaperNumberingError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label_from_doi_label</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">Issue</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">,</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">,</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">,</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ReferenceFormSet</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataDOAJForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">JournalUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">funders.models</span> <span class=\"k\">import</span> <span class=\"n\">Funder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.constants</span> <span class=\"k\">import</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.signals</span> <span class=\"k\">import</span> <span class=\"n\">notify_stream_status_change</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">funders.forms</span> <span class=\"k\">import</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">,</span> <span class=\"n\">GrantSelectForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ConfirmationForm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n\n\n<span class=\"c1\">############</span>\n<span class=\"c1\"># Journals</span>\n<span class=\"c1\">############</span>\n\n<div class=\"viewcode-block\" id=\"journals\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.journals\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">journals</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main landing page for Journals application.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journals.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">landing_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">start_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"n\">until_date__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"n\">latest_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">until_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">current_issue</span><span class=\"p\">:</span>\n        <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                              <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;current_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;latest_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">latest_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_landing_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issues</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issues.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"recent\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.recent\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recent</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for the most recent 20 publications in SciPost Physics.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">recent_papers</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                          <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">20</span><span class=\"p\">]</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recent_papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">recent_papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_recent.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"accepted\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.accepted\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accepted</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for submissions to SciPost Physics which</span>\n<span class=\"sd\">    have been accepted but are not yet published.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted_SP_submissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n                               <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;accepted_SP_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">accepted_SP_submissions</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_accepted.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">info_for_authors</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_info_for_authors.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">about</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_about.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issue_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">papers</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">publication_set</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">next_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__gt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">())</span>\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;next_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">next_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issue_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">#######################</span>\n<span class=\"c1\"># Publication process #</span>\n<span class=\"c1\">#######################</span>\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"initiate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.initiate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">initiate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    Publish the manuscript after proofs have been accepted.</span>\n<span class=\"sd\">    This method prefills a ValidatePublicationForm for further</span>\n<span class=\"sd\">    processing (verification in validate_publication method).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">initiate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_be_issued_in&#39;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Determine next available paper number:</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">paper_nr</span> <span class=\"o\">&gt;</span> <span class=\"mi\">999</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PaperNumberingError</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Build form data</span>\n        <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">name</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">doi_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span>\n        <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;@Article{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">title={{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;}},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">author={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39; and&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">journal={&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">volume={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">issue={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">pages={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">year={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">publisher=</span><span class=\"si\">{SciPost}</span><span class=\"s1\">,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">doi={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">url={https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;}</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;in_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">paper_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;domain&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">domain</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;subject_area&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;secondary_areas&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">secondary_areas</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;author_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">abstract</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;BiBTeX_entry&#39;</span><span class=\"p\">:</span> <span class=\"n\">BiBTeX_entry</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;acceptance_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submission_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">validate_publication_form</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;initiate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">initiate_publication_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/initiate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"validate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.validate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">validate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This creates a Publication instance from the ValidatePublicationForm,</span>\n<span class=\"sd\">    pre-filled by the initiate_publication method above.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># TODO: move from uploads to Journal folder</span>\n    <span class=\"c1\"># TODO: create metadata</span>\n    <span class=\"c1\"># TODO: set DOI, register with Crossref</span>\n    <span class=\"c1\"># TODO: add funding info</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Fill remaining data</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">submission_author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">submission_author</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># Add Institutions to the publication</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_registered</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">for</span> <span class=\"n\">current_affiliation</span> <span class=\"ow\">in</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">affiliations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">():</span>\n                <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">institutions</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">current_affiliation</span><span class=\"o\">.</span><span class=\"n\">institution</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Save the beast</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Move file to final location</span>\n        <span class=\"n\">initial_path</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">path</span>\n        <span class=\"n\">new_dir</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n                   <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">())</span>\n        <span class=\"n\">new_path</span> <span class=\"o\">=</span> <span class=\"n\">new_dir</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">new_dir</span><span class=\"p\">)</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">(</span><span class=\"n\">initial_path</span><span class=\"p\">,</span> <span class=\"n\">new_path</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">new_path</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Mark the submission as having been published:</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">published_as</span> <span class=\"o\">=</span> <span class=\"n\">publication</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;published&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Update ProductionStream</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;production_stream&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">production_stream</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span><span class=\"p\">:</span>\n                <span class=\"n\">prodevent</span> <span class=\"o\">=</span> <span class=\"n\">ProductionEvent</span><span class=\"p\">(</span>\n                    <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"n\">stream</span><span class=\"p\">,</span>\n                    <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">comments</span><span class=\"o\">=</span><span class=\"s1\">&#39; published the manuscript.&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">noted_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">prodevent</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">notify_stream_status_change</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># TODO: Create a Commentary Page</span>\n        <span class=\"c1\"># Email authors</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_paper_published_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Submission has been published as </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The publication has been validated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The form was invalid.&#39;</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">manage_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">issue_doi_label</span> <span class=\"o\">=</span> <span class=\"n\">issue_doi_label_from_doi_label</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__doi_label</span><span class=\"o\">=</span><span class=\"n\">issue_doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">associate_grant_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">associate_generic_funder_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;issue_doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_grant_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_grant_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_generic_funder_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_generic_funder_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_first_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">author_object_id</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n    <span class=\"n\">author_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Redo ordering</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">author_objects</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n    <span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">author_objects</span><span class=\"p\">:</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">count</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Marked </span><span class=\"si\">{}</span><span class=\"s1\"> first author&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">author_object</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_author\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_author\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">unregistered_author_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If not all authors are registered Contributors or if they have not</span>\n<span class=\"sd\">    all claimed authorship, this method allows editorial administrators</span>\n<span class=\"sd\">    to associated them to the publication.</span>\n<span class=\"sd\">    This is important for the Crossref metadata, in which all authors must appear.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">contributor_id</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">and</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n            <span class=\"n\">unregistered_author</span><span class=\"o\">=</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an unregistered author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">unregistered_author</span>\n        <span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_found</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/add_author.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_citation_list_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_citation_list_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_citation_list_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the citation_list dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">bibitems_form</span> <span class=\"o\">=</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">extract_dois</span><span class=\"p\">()</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated citation list&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_citation_list_metadata&#39;</span><span class=\"p\">,</span>\n                        <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;bibitems_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">bibitems_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_citation_list_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"update_references\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.update_references\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">update_references</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Update the References for a certain Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">references</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">references</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n    <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">ReferenceFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">references</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                               <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;extra&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;prefill&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">prefill</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;References saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/update_references.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_funding_info_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_funding_info_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_funding_info_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the funding_info dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">funding_statement</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated funding info&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_funding_info_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_info_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_funding_info_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_associated_grant\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_associated_grant\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_associated_grant</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a grant from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">grant_select_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;grant&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Grant added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_generic_funder\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_generic_funder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_generic_funder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a funder (generic, not via grant) from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">funder_select_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;funder&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Generic funder added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_metadata_xml\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_metadata_xml\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_metadata_xml</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    To be called by an EdAdmin after the citation_list,</span>\n<span class=\"sd\">    funding_info entries have been filled.</span>\n<span class=\"sd\">    Populates the metadata_xml field of a Publication instance.</span>\n<span class=\"sd\">    The contents can then be sent to Crossref for registration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">}</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.0&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.0&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:fr=&quot;http://www.crossref.org/fundref.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.0 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.0.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:ai=&quot;http://www.crossref.org/AccessIndicators.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;full_title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/full_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;abbrev_title&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/abbrev_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issn media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">electronic</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">issn</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issn&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;volume&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issue&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_article publication_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">full_text</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Precondition: all authors MUST be listed in authors field of publication instance,</span>\n    <span class=\"c1\"># this to be checked by EdAdmin before publishing.</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">author_object</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">first</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">additional</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">and</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;ORCID&gt;http://orcid.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/ORCID&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publisher_item&gt;&lt;item_number item_number_type=&quot;article_number&quot;&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/item_number&gt;&lt;/publisher_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_policy&gt;10.21468/SciPost.CrossmarkPolicy&lt;/crossmark_policy&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain&gt;&lt;domain&gt;scipost.org&lt;/domain&gt;&lt;/crossmark_domain&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain_exclusive&gt;false&lt;/crossmark_domain_exclusive&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"n\">funders</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Funder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">grant__in</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n               <span class=\"o\">|</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span>\n    <span class=\"n\">nr_funders</span> <span class=\"o\">=</span> <span class=\"n\">funders</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:program name=&quot;fundref&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">funder</span> <span class=\"ow\">in</span> <span class=\"n\">funders</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;fundgroup&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_name&quot;&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_identifier&quot;&gt;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">identifier</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">grant</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">funder</span> <span class=\"o\">==</span> <span class=\"n\">funder</span><span class=\"p\">:</span>\n                    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                        <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;award_number&quot;&gt;&#39;</span>\n                        <span class=\"o\">+</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">number</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;ai:program name=&quot;AccessIndicators&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;ai:license_ref&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_cc_license_URI</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/ai:license_ref&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/ai:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;archive_locations&gt;&lt;archive name=&quot;CLOCKSS&quot;&gt;&lt;/archive&gt;&lt;/archive_locations&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;crawler-based&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item crawler=&quot;iParadigms&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/item&gt;&lt;/collection&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;text-mining&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item&gt;&lt;resource mime_type=&quot;application/pdf&quot;&gt;&#39;</span>\n        <span class=\"s1\">&#39;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;&lt;/item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/collection&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"k\">for</span> <span class=\"n\">ref</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;&lt;citation key=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;key&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;/citation&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/journal_article&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/doi_batch&gt;&#39;</span>\n\n    <span class=\"n\">create_metadata_xml_form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Metadata XML saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;create_metadata_xml_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_metadata_xml.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">option</span><span class=\"o\">=</span><span class=\"s1\">&#39;test&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Crossref metadata deposit.</span>\n<span class=\"sd\">    If test==True, test the metadata_xml using the Crossref test server.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span>\n            <span class=\"n\">request</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;This publication has no metadata. Produce it first before saving it.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_metadata_xml&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_Crossref_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.xml&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Deposit already done before.</span>\n        <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># New deposit, go for it.</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">:</span>\n            <span class=\"c1\"># CAUTION: Real deposit only on production (non-debug-mode)</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n\n        <span class=\"c1\"># First perform the actual deposit to Crossref</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n        <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n        <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n        <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n        <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">Deposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                              <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                              <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                              <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                              <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n            <span class=\"c1\"># Save the filename with timestamp</span>\n            <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Copy file</span>\n            <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                            <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_crossref_deposit</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;option&#39;</span><span class=\"p\">:</span> <span class=\"n\">option</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;valid&#39;</span><span class=\"p\">:</span> <span class=\"n\">valid</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">produce_metadata_DOAJ</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataDOAJForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfully produced metadata DOAJ.&#39;</span>\n                                  <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_doaj_create.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_DOAJ_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_DOAJ_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_DOAJ_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DOAJ metadata deposit.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: please first produce &#39;</span>\n                                  <span class=\"s1\">&#39;DOAJ metadata before depositing.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_DOAJ_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.json&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The metadata file for this metadata timestamp already exists&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://doaj.org/api/v1/articles&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;api_key&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DOAJ_API_KEY</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">json</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">)</span>\n        <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">raise_for_status</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">exceptions</span><span class=\"o\">.</span><span class=\"n\">HTTPError</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: Post went wrong, response text: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                          <span class=\"n\">metadata_DOAJ</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">,</span> <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n    <span class=\"c1\"># Save a copy to the filename with and without timestamp</span>\n    <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n        <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">))</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Copy file</span>\n    <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                    <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Save the database entry</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfull deposit of metadata DOAJ.&#39;</span>\n                              <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_doaj_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_links</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">query_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;?xml version = &quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;query_batch version=&quot;2.0&quot; xmlns = &quot;http://www.crossref.org/qschema/2.0&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/qschema/2.0 &#39;</span>\n                 <span class=\"s1\">&#39;http://www.crossref.org/qschema/crossref_query_input2.0.xsd&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;fl_query alert=&quot;false&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/fl_query&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/query_batch&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/getForwardLinks&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;usr&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;pwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;qdata&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_xml</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"p\">}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">status_code</span> <span class=\"o\">==</span> <span class=\"mi\">401</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Crossref credentials are invalid.&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;Please contact the SciPost Admin.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n    <span class=\"n\">response_deserialized</span> <span class=\"o\">=</span> <span class=\"n\">ET</span><span class=\"o\">.</span><span class=\"n\">fromstring</span><span class=\"p\">(</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{http://www.crossref.org/qrschema/2.0}&#39;</span>\n    <span class=\"n\">citations</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">link</span> <span class=\"ow\">in</span> <span class=\"n\">response_deserialized</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;forward_link&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">doi</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">article_title</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;sequence&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;first&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">first_author_given_name</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;given_name&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n                <span class=\"n\">first_author_surname</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;surname&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">citations</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">:</span> <span class=\"n\">article_title</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal_abbreviation</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_given_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_given_name</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_surname&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_surname</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;multiauthors&#39;</span><span class=\"p\">:</span> <span class=\"n\">multiauthors</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">:</span> <span class=\"n\">volume</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_page</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">:</span> <span class=\"n\">item_number</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">:</span> <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">citations</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_deserialized&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_deserialized</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citations&#39;</span><span class=\"p\">:</span> <span class=\"n\">citations</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_links.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"sign_existing_report\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.sign_existing_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">sign_existing_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Allows the author of a Report, originally submitted anonymously,</span>\n<span class=\"sd\">    to sign the Report.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Only the author of this Report can change its anonymity status&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConfirmationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your Report is now publicly signed.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Report signing operation cancelled.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/sign_existing_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_report_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_report_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_report_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Reports.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">paginator</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">reports</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">)</span>\n\n    <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;page&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">PageNotAnInteger</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">EmptyPage</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">num_pages</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_report_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_comment_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_comment_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_comment_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Comments.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_comment_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_report_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_comment_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"generic_metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.generic_metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">generic_metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method creates the metadata for non-Publication objects</span>\n<span class=\"sd\">    such as Reports and Comments, and deposits the metadata to</span>\n<span class=\"sd\">    Crossref.</span>\n<span class=\"sd\">    If there exists a relation to a SciPost-published object,</span>\n<span class=\"sd\">    the deposit uses Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">    Otherwise the deposit is done as a dataset.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">relation_to_published</span> <span class=\"o\">=</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">relation_to_published</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">create_doi_label</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.1&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.1&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.1 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.1.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">relation_to_published</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;peer_review stage=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;contributors&gt;&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;anonymous sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;/&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">):</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org/</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;review_date&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;/review_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;program xmlns=&quot;http://www.crossref.org/relations.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;related_item&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;description&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/description&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;inter_work_relation relationship-type=&quot;isReviewOf&quot; identifier-type=&quot;doi&quot;&gt;&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/inter_work_relation&gt;&lt;/related_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/program&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">url_to_declare</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/peer_review&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/doi_batch&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database_metadata language=&quot;en&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;SciPost Reports and Comments&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/database_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;dataset dataset_type=&quot;collection&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/dataset&gt;&lt;/database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;&lt;/doi_batch&gt;&#39;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEBUG</span><span class=\"p\">:</span>\n        <span class=\"c1\"># CAUTION: Debug is False, production goes for real deposit!!!</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">metadata_xml</span><span class=\"p\">,</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">ContentType</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_for_model</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">),</span>\n                                <span class=\"n\">object_id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">content_object</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"p\">,</span>\n                                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                                <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                                <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                <span class=\"n\">response</span><span class=\"o\">=</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/generic_metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_generic_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_object_made_citable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.email_object_made_citable\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_object_made_citable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to the author of a Report or a Comment,</span>\n<span class=\"sd\">    to notify that the object has been made citable (doi registered).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span>\n            <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;This object does not have a DOI yet.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_citation&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_citation</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_doi</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_report_made_citable</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_made_citable</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Email sent&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Viewing #</span>\n<span class=\"c1\">###########</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">report_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">comment_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">author_reply_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/publication_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span>\n                                       <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Feed DOIs to arXiv #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This method provides arXiv with the doi and journal ref of the 100 most recent</span>\n<span class=\"sd\">publications in the journal specified by doi_label.</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"k\">def</span> <span class=\"nf\">arxiv_doi_feed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;preprint xmlns=&quot;http://arxiv.org/doi_feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n               <span class=\"s1\">&#39;identifier=&quot;SciPost.org &#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; arXiv.org DOI feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;version=&quot;DOI SnappyFeed v1.0&quot; &#39;</span>\n               <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://arxiv.org/doi_feed &#39;</span>\n               <span class=\"s1\">&#39;http://arxiv.org/schemas/doi_feed.xsd&quot;&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;date year=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; month=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; day=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">),</span>\n                                                           <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">),</span> <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">100</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">publication</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n        <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;article preprint_id=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; doi=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; journal_ref=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()))</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/preprint&gt;&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">feedxml</span><span class=\"p\">,</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;text/xml&#39;</span><span class=\"p\">)</span>\n</pre></div>", "sidebars": null, "title": "journals.views"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for journals.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">requests</span>\n<span class=\"kn\">import</span> <span class=\"nn\">shutil</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">xml.etree.ElementTree</span> <span class=\"k\">as</span> <span class=\"nn\">ET</span>\n\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span><span class=\"p\">,</span> <span class=\"n\">EmptyPage</span><span class=\"p\">,</span> <span class=\"n\">PageNotAnInteger</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PaperNumberingError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label_from_doi_label</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">Issue</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">,</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">,</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">,</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ReferenceFormSet</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataDOAJForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">JournalUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">funders.models</span> <span class=\"k\">import</span> <span class=\"n\">Funder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.constants</span> <span class=\"k\">import</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.signals</span> <span class=\"k\">import</span> <span class=\"n\">notify_stream_status_change</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">funders.forms</span> <span class=\"k\">import</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">,</span> <span class=\"n\">GrantSelectForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ConfirmationForm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n\n\n<span class=\"c1\">############</span>\n<span class=\"c1\"># Journals</span>\n<span class=\"c1\">############</span>\n\n<div class=\"viewcode-block\" id=\"journals\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.journals\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">journals</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main landing page for Journals application.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journals.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">landing_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">start_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"n\">until_date__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"n\">latest_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">until_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">current_issue</span><span class=\"p\">:</span>\n        <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                              <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;current_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;latest_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">latest_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_landing_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issues</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issues.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"recent\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.recent\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recent</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for the most recent 20 publications in SciPost Physics.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">recent_papers</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                          <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">20</span><span class=\"p\">]</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recent_papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">recent_papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_recent.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"accepted\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.accepted\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accepted</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for submissions to SciPost Physics which</span>\n<span class=\"sd\">    have been accepted but are not yet published.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted_SP_submissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n                               <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;accepted_SP_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">accepted_SP_submissions</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_accepted.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">info_for_authors</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_info_for_authors.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">about</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_about.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issue_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">papers</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">publication_set</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">next_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__gt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">())</span>\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;next_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">next_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issue_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">#######################</span>\n<span class=\"c1\"># Publication process #</span>\n<span class=\"c1\">#######################</span>\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"initiate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.initiate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">initiate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    Publish the manuscript after proofs have been accepted.</span>\n<span class=\"sd\">    This method prefills a ValidatePublicationForm for further</span>\n<span class=\"sd\">    processing (verification in validate_publication method).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">initiate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_be_issued_in&#39;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Determine next available paper number:</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">paper_nr</span> <span class=\"o\">&gt;</span> <span class=\"mi\">999</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PaperNumberingError</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Build form data</span>\n        <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">name</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">doi_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span>\n        <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;@Article{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">title={{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;}},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">author={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39; and&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">journal={&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">volume={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">issue={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">pages={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">year={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">publisher=</span><span class=\"si\">{SciPost}</span><span class=\"s1\">,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">doi={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">url={https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;}</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;in_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">paper_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;domain&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">domain</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;subject_area&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;secondary_areas&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">secondary_areas</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;author_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">abstract</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;BiBTeX_entry&#39;</span><span class=\"p\">:</span> <span class=\"n\">BiBTeX_entry</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;acceptance_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submission_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">validate_publication_form</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;initiate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">initiate_publication_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/initiate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"validate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.validate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">validate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This creates a Publication instance from the ValidatePublicationForm,</span>\n<span class=\"sd\">    pre-filled by the initiate_publication method above.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># TODO: move from uploads to Journal folder</span>\n    <span class=\"c1\"># TODO: create metadata</span>\n    <span class=\"c1\"># TODO: set DOI, register with Crossref</span>\n    <span class=\"c1\"># TODO: add funding info</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Fill remaining data</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">submission_author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">submission_author</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># Add Institutions to the publication</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_registered</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">for</span> <span class=\"n\">current_affiliation</span> <span class=\"ow\">in</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">affiliations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">():</span>\n                <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">institutions</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">current_affiliation</span><span class=\"o\">.</span><span class=\"n\">institution</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Save the beast</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Move file to final location</span>\n        <span class=\"n\">initial_path</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">path</span>\n        <span class=\"n\">new_dir</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n                   <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">())</span>\n        <span class=\"n\">new_path</span> <span class=\"o\">=</span> <span class=\"n\">new_dir</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">new_dir</span><span class=\"p\">)</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">(</span><span class=\"n\">initial_path</span><span class=\"p\">,</span> <span class=\"n\">new_path</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">new_path</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Mark the submission as having been published:</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">published_as</span> <span class=\"o\">=</span> <span class=\"n\">publication</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;published&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Update ProductionStream</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;production_stream&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">production_stream</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span><span class=\"p\">:</span>\n                <span class=\"n\">prodevent</span> <span class=\"o\">=</span> <span class=\"n\">ProductionEvent</span><span class=\"p\">(</span>\n                    <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"n\">stream</span><span class=\"p\">,</span>\n                    <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">comments</span><span class=\"o\">=</span><span class=\"s1\">&#39; published the manuscript.&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">noted_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">prodevent</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">notify_stream_status_change</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># TODO: Create a Commentary Page</span>\n        <span class=\"c1\"># Email authors</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_paper_published_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Submission has been published as </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The publication has been validated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The form was invalid.&#39;</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">manage_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">issue_doi_label</span> <span class=\"o\">=</span> <span class=\"n\">issue_doi_label_from_doi_label</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__doi_label</span><span class=\"o\">=</span><span class=\"n\">issue_doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">associate_grant_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">associate_generic_funder_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;issue_doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_grant_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_grant_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_generic_funder_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_generic_funder_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_first_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">author_object_id</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n    <span class=\"n\">author_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Redo ordering</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">author_objects</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n    <span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">author_objects</span><span class=\"p\">:</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">count</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Marked </span><span class=\"si\">{}</span><span class=\"s1\"> first author&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">author_object</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_author\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_author\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">unregistered_author_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If not all authors are registered Contributors or if they have not</span>\n<span class=\"sd\">    all claimed authorship, this method allows editorial administrators</span>\n<span class=\"sd\">    to associated them to the publication.</span>\n<span class=\"sd\">    This is important for the Crossref metadata, in which all authors must appear.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">contributor_id</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">and</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n            <span class=\"n\">unregistered_author</span><span class=\"o\">=</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an unregistered author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">unregistered_author</span>\n        <span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_found</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/add_author.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_citation_list_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_citation_list_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_citation_list_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the citation_list dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">bibitems_form</span> <span class=\"o\">=</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">extract_dois</span><span class=\"p\">()</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated citation list&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_citation_list_metadata&#39;</span><span class=\"p\">,</span>\n                        <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;bibitems_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">bibitems_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_citation_list_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"update_references\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.update_references\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">update_references</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Update the References for a certain Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">references</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">references</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n    <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">ReferenceFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">references</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                               <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;extra&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;prefill&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">prefill</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;References saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/update_references.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_funding_info_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_funding_info_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_funding_info_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the funding_info dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">funding_statement</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated funding info&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_funding_info_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_info_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_funding_info_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_associated_grant\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_associated_grant\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_associated_grant</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a grant from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">grant_select_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;grant&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Grant added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_generic_funder\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_generic_funder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_generic_funder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a funder (generic, not via grant) from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">funder_select_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;funder&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Generic funder added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_metadata_xml\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_metadata_xml\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_metadata_xml</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    To be called by an EdAdmin after the citation_list,</span>\n<span class=\"sd\">    funding_info entries have been filled.</span>\n<span class=\"sd\">    Populates the metadata_xml field of a Publication instance.</span>\n<span class=\"sd\">    The contents can then be sent to Crossref for registration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">}</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.0&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.0&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:fr=&quot;http://www.crossref.org/fundref.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.0 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.0.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:ai=&quot;http://www.crossref.org/AccessIndicators.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;full_title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/full_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;abbrev_title&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/abbrev_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issn media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">electronic</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">issn</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issn&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;volume&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issue&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_article publication_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">full_text</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Precondition: all authors MUST be listed in authors field of publication instance,</span>\n    <span class=\"c1\"># this to be checked by EdAdmin before publishing.</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">author_object</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">first</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">additional</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">and</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;ORCID&gt;http://orcid.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/ORCID&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publisher_item&gt;&lt;item_number item_number_type=&quot;article_number&quot;&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/item_number&gt;&lt;/publisher_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_policy&gt;10.21468/SciPost.CrossmarkPolicy&lt;/crossmark_policy&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain&gt;&lt;domain&gt;scipost.org&lt;/domain&gt;&lt;/crossmark_domain&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain_exclusive&gt;false&lt;/crossmark_domain_exclusive&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"n\">funders</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Funder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">grant__in</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n               <span class=\"o\">|</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span>\n    <span class=\"n\">nr_funders</span> <span class=\"o\">=</span> <span class=\"n\">funders</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:program name=&quot;fundref&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">funder</span> <span class=\"ow\">in</span> <span class=\"n\">funders</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;fundgroup&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_name&quot;&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_identifier&quot;&gt;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">identifier</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">grant</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">funder</span> <span class=\"o\">==</span> <span class=\"n\">funder</span><span class=\"p\">:</span>\n                    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                        <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;award_number&quot;&gt;&#39;</span>\n                        <span class=\"o\">+</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">number</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;ai:program name=&quot;AccessIndicators&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;ai:license_ref&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_cc_license_URI</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/ai:license_ref&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/ai:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;archive_locations&gt;&lt;archive name=&quot;CLOCKSS&quot;&gt;&lt;/archive&gt;&lt;/archive_locations&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;crawler-based&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item crawler=&quot;iParadigms&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/item&gt;&lt;/collection&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;text-mining&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item&gt;&lt;resource mime_type=&quot;application/pdf&quot;&gt;&#39;</span>\n        <span class=\"s1\">&#39;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;&lt;/item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/collection&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"k\">for</span> <span class=\"n\">ref</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;&lt;citation key=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;key&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;/citation&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/journal_article&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/doi_batch&gt;&#39;</span>\n\n    <span class=\"n\">create_metadata_xml_form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Metadata XML saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;create_metadata_xml_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_metadata_xml.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">option</span><span class=\"o\">=</span><span class=\"s1\">&#39;test&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Crossref metadata deposit.</span>\n<span class=\"sd\">    If test==True, test the metadata_xml using the Crossref test server.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span>\n            <span class=\"n\">request</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;This publication has no metadata. Produce it first before saving it.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_metadata_xml&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_Crossref_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.xml&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Deposit already done before.</span>\n        <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># New deposit, go for it.</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">:</span>\n            <span class=\"c1\"># CAUTION: Real deposit only on production (non-debug-mode)</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n\n        <span class=\"c1\"># First perform the actual deposit to Crossref</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n        <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n        <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n        <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n        <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">Deposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                              <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                              <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                              <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                              <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n            <span class=\"c1\"># Save the filename with timestamp</span>\n            <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Copy file</span>\n            <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                            <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_crossref_deposit</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;option&#39;</span><span class=\"p\">:</span> <span class=\"n\">option</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;valid&#39;</span><span class=\"p\">:</span> <span class=\"n\">valid</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">produce_metadata_DOAJ</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataDOAJForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfully produced metadata DOAJ.&#39;</span>\n                                  <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_doaj_create.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_DOAJ_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_DOAJ_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_DOAJ_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DOAJ metadata deposit.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: please first produce &#39;</span>\n                                  <span class=\"s1\">&#39;DOAJ metadata before depositing.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_DOAJ_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.json&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The metadata file for this metadata timestamp already exists&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://doaj.org/api/v1/articles&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;api_key&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DOAJ_API_KEY</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">json</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">)</span>\n        <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">raise_for_status</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">exceptions</span><span class=\"o\">.</span><span class=\"n\">HTTPError</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: Post went wrong, response text: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                          <span class=\"n\">metadata_DOAJ</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">,</span> <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n    <span class=\"c1\"># Save a copy to the filename with and without timestamp</span>\n    <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n        <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">))</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Copy file</span>\n    <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                    <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Save the database entry</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfull deposit of metadata DOAJ.&#39;</span>\n                              <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_doaj_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_links</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">query_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;?xml version = &quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;query_batch version=&quot;2.0&quot; xmlns = &quot;http://www.crossref.org/qschema/2.0&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/qschema/2.0 &#39;</span>\n                 <span class=\"s1\">&#39;http://www.crossref.org/qschema/crossref_query_input2.0.xsd&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;fl_query alert=&quot;false&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/fl_query&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/query_batch&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/getForwardLinks&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;usr&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;pwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;qdata&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_xml</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"p\">}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">status_code</span> <span class=\"o\">==</span> <span class=\"mi\">401</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Crossref credentials are invalid.&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;Please contact the SciPost Admin.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n    <span class=\"n\">response_deserialized</span> <span class=\"o\">=</span> <span class=\"n\">ET</span><span class=\"o\">.</span><span class=\"n\">fromstring</span><span class=\"p\">(</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{http://www.crossref.org/qrschema/2.0}&#39;</span>\n    <span class=\"n\">citations</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">link</span> <span class=\"ow\">in</span> <span class=\"n\">response_deserialized</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;forward_link&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">doi</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">article_title</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;sequence&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;first&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">first_author_given_name</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;given_name&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n                <span class=\"n\">first_author_surname</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;surname&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">citations</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">:</span> <span class=\"n\">article_title</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal_abbreviation</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_given_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_given_name</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_surname&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_surname</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;multiauthors&#39;</span><span class=\"p\">:</span> <span class=\"n\">multiauthors</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">:</span> <span class=\"n\">volume</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_page</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">:</span> <span class=\"n\">item_number</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">:</span> <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">citations</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_deserialized&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_deserialized</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citations&#39;</span><span class=\"p\">:</span> <span class=\"n\">citations</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_links.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"sign_existing_report\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.sign_existing_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">sign_existing_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Allows the author of a Report, originally submitted anonymously,</span>\n<span class=\"sd\">    to sign the Report.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Only the author of this Report can change its anonymity status&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConfirmationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your Report is now publicly signed.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Report signing operation cancelled.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/sign_existing_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_report_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_report_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_report_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Reports.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">paginator</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">reports</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">)</span>\n\n    <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;page&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">PageNotAnInteger</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">EmptyPage</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">num_pages</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_report_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_comment_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_comment_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_comment_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Comments.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_comment_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_report_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_comment_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"generic_metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.generic_metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">generic_metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method creates the metadata for non-Publication objects</span>\n<span class=\"sd\">    such as Reports and Comments, and deposits the metadata to</span>\n<span class=\"sd\">    Crossref.</span>\n<span class=\"sd\">    If there exists a relation to a SciPost-published object,</span>\n<span class=\"sd\">    the deposit uses Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">    Otherwise the deposit is done as a dataset.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">relation_to_published</span> <span class=\"o\">=</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">relation_to_published</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">create_doi_label</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.1&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.1&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.1 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.1.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">relation_to_published</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;peer_review stage=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;contributors&gt;&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;anonymous sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;/&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">):</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org/</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;review_date&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;/review_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;program xmlns=&quot;http://www.crossref.org/relations.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;related_item&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;description&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/description&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;inter_work_relation relationship-type=&quot;isReviewOf&quot; identifier-type=&quot;doi&quot;&gt;&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/inter_work_relation&gt;&lt;/related_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/program&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">url_to_declare</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/peer_review&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/doi_batch&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database_metadata language=&quot;en&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;SciPost Reports and Comments&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/database_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;dataset dataset_type=&quot;collection&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/dataset&gt;&lt;/database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;&lt;/doi_batch&gt;&#39;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEBUG</span><span class=\"p\">:</span>\n        <span class=\"c1\"># CAUTION: Debug is False, production goes for real deposit!!!</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">metadata_xml</span><span class=\"p\">,</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">ContentType</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_for_model</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">),</span>\n                                <span class=\"n\">object_id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">content_object</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"p\">,</span>\n                                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                                <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                                <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                <span class=\"n\">response</span><span class=\"o\">=</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/generic_metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_generic_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_object_made_citable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.email_object_made_citable\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_object_made_citable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to the author of a Report or a Comment,</span>\n<span class=\"sd\">    to notify that the object has been made citable (doi registered).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span>\n            <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;This object does not have a DOI yet.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_citation&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_citation</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_doi</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_report_made_citable</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_made_citable</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Email sent&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Viewing #</span>\n<span class=\"c1\">###########</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">report_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">comment_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">author_reply_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/publication_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span>\n                                       <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Feed DOIs to arXiv #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This method provides arXiv with the doi and journal ref of the 100 most recent</span>\n<span class=\"sd\">publications in the journal specified by doi_label.</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"k\">def</span> <span class=\"nf\">arxiv_doi_feed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;preprint xmlns=&quot;http://arxiv.org/doi_feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n               <span class=\"s1\">&#39;identifier=&quot;SciPost.org &#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; arXiv.org DOI feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;version=&quot;DOI SnappyFeed v1.0&quot; &#39;</span>\n               <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://arxiv.org/doi_feed &#39;</span>\n               <span class=\"s1\">&#39;http://arxiv.org/schemas/doi_feed.xsd&quot;&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;date year=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; month=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; day=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">),</span>\n                                                           <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">),</span> <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">100</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">publication</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n        <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;article preprint_id=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; doi=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; journal_ref=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()))</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/preprint&gt;&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">feedxml</span><span class=\"p\">,</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;text/xml&#39;</span><span class=\"p\">)</span>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/journals/views", "title": "journals.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/scipost/models.fjson b/docs/codebase/_build/json/_modules/scipost/models.fjson
index 3c9d1a5ade83ed8a711a2c5569fc584d79e6258a..9539be201f952b1ec2d81da84a30746609c76b68 100644
--- a/docs/codebase/_build/json/_modules/scipost/models.fjson
+++ b/docs/codebase/_build/json/_modules/scipost/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/scipost/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for scipost.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">get_user_model</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">ArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">subject_areas_dict</span><span class=\"p\">,</span> <span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">,</span> <span class=\"n\">TITLE_CHOICES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">,</span> <span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">FellowManager</span><span class=\"p\">,</span> <span class=\"n\">ContributorQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimQuerySet</span>\n\n<span class=\"n\">today</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n\n<div class=\"viewcode-block\" id=\"get_sentinel_user\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.get_sentinel_user\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sentinel_user</span><span class=\"p\">():</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Temporary fix: eventually the &#39;to-be-removed-Contributor&#39; should be</span>\n<span class=\"sd\">    status: &quot;deactivated&quot; and anonymized.</span>\n<span class=\"sd\">    Fallback user for models relying on Contributor that is being deleted.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">get_user_model</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=-</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">user</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Contributor\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Contributor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All *science* users of SciPost are Contributors.</span>\n<span class=\"sd\">    username, password, email, first_name and last_name are inherited from User.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PROTECT</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span><span class=\"p\">,</span>\n                                      <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n                                  <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Main discipline&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">expertises</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">orcid_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;ORCID id&quot;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;address&quot;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">personalwebpage</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;personal web page&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET</span><span class=\"p\">(</span><span class=\"n\">get_sentinel_user</span><span class=\"p\">),</span>\n                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;contrib_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;I accept to receive SciPost emails&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ContributorQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:contributor_info&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_formal_display</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_currently_available</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_EdCol_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_SP_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_MEC</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fellowships</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_VE</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Contributor.generate_key\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor.generate_key\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">generate_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">feed</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Generate and save a new activation_key for the contributor, given a certain feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n            <span class=\"n\">feed</span> <span class=\"o\">+=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n        <span class=\"n\">feed</span> <span class=\"o\">=</span> <span class=\"n\">feed</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">salt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">expertises_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;, &#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"n\">subject_areas_dict</span><span class=\"p\">[</span><span class=\"n\">exp</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">exp</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span></div>\n\n\n<div class=\"viewcode-block\" id=\"UnavailabilityPeriod\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.UnavailabilityPeriod\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnavailabilityPeriod</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unavailability_periods&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">start</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-start&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\"> to </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Remark\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Remark\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Remark</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">feedback</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Feedback&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nomination</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Nomination&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">motion</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Motion&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.EICRecommendation&#39;</span><span class=\"p\">,</span>\n                                       <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;remarks&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s2\">&quot;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Invitations #</span>\n<span class=\"c1\">###############</span>\n\n<div class=\"viewcode-block\" id=\"DraftInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.DraftInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DraftInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Draft of an invitation, filled in by an officer.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">drafted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_drafted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">invitation_type</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RegistrationInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.RegistrationInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RegistrationInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">message_style</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">personal_message</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_sent</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">declined</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"CitationNotification\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.CitationNotification\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CitationNotification</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"AuthorshipClaim\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.AuthorshipClaim\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">claimant</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                 <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimant&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PrecookedEmail\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.PrecookedEmail\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PrecookedEmail</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each instance contains an email template in both plain and html formats.</span>\n<span class=\"sd\">    Can only be created by Admins.</span>\n<span class=\"sd\">    For further use in scipost:send_precooked_email method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">email_subject</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">emailed_to</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">email_subject</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Static info models #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCollege\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollege\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollege</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;A SciPost Editorial College for a specific discipline.&#39;&#39;&#39;</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">discipline</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EditorialCollegeFellowship\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollegeFellowship\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollegeFellowship</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Editorial College Fellowship connecting Editorial College and Contributors,</span>\n<span class=\"sd\">    maybe with a limiting start/until date.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.EditorialCollege&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">affiliation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">FellowManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;college&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;until_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"fm\">__str__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_active</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">True</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span>\n        <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"ow\">and</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span></div>\n</pre></div>", "sidebars": null, "title": "scipost.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for scipost.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">get_user_model</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">ArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">subject_areas_dict</span><span class=\"p\">,</span> <span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">,</span> <span class=\"n\">TITLE_CHOICES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">,</span> <span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">FellowManager</span><span class=\"p\">,</span> <span class=\"n\">ContributorQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimQuerySet</span>\n\n<span class=\"n\">today</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n\n<div class=\"viewcode-block\" id=\"get_sentinel_user\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.get_sentinel_user\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sentinel_user</span><span class=\"p\">():</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Temporary fix: eventually the &#39;to-be-removed-Contributor&#39; should be</span>\n<span class=\"sd\">    status: &quot;deactivated&quot; and anonymized.</span>\n<span class=\"sd\">    Fallback user for models relying on Contributor that is being deleted.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">get_user_model</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=-</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">user</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Contributor\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Contributor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All *science* users of SciPost are Contributors.</span>\n<span class=\"sd\">    username, password, email, first_name and last_name are inherited from User.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PROTECT</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span><span class=\"p\">,</span>\n                                      <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n                                  <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Main discipline&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">expertises</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">orcid_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;ORCID id&quot;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;address&quot;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">personalwebpage</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;personal web page&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET</span><span class=\"p\">(</span><span class=\"n\">get_sentinel_user</span><span class=\"p\">),</span>\n                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;contrib_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;I accept to receive SciPost emails&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ContributorQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:contributor_info&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_formal_display</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_currently_available</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_EdCol_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_SP_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_MEC</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fellowships</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_VE</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Contributor.generate_key\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor.generate_key\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">generate_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">feed</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Generate and save a new activation_key for the contributor, given a certain feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n            <span class=\"n\">feed</span> <span class=\"o\">+=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n        <span class=\"n\">feed</span> <span class=\"o\">=</span> <span class=\"n\">feed</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">salt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">expertises_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;, &#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"n\">subject_areas_dict</span><span class=\"p\">[</span><span class=\"n\">exp</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">exp</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span></div>\n\n\n<div class=\"viewcode-block\" id=\"UnavailabilityPeriod\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.UnavailabilityPeriod\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnavailabilityPeriod</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unavailability_periods&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">start</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-start&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\"> to </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Remark\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Remark\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Remark</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">feedback</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Feedback&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nomination</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Nomination&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">motion</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Motion&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.EICRecommendation&#39;</span><span class=\"p\">,</span>\n                                       <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;remarks&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s2\">&quot;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Invitations #</span>\n<span class=\"c1\">###############</span>\n\n<div class=\"viewcode-block\" id=\"DraftInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.DraftInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DraftInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Draft of an invitation, filled in by an officer.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">drafted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_drafted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">invitation_type</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RegistrationInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.RegistrationInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RegistrationInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">message_style</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">personal_message</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_sent</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">declined</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"CitationNotification\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.CitationNotification\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CitationNotification</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"AuthorshipClaim\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.AuthorshipClaim\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">claimant</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                 <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimant&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PrecookedEmail\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.PrecookedEmail\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PrecookedEmail</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each instance contains an email template in both plain and html formats.</span>\n<span class=\"sd\">    Can only be created by Admins.</span>\n<span class=\"sd\">    For further use in scipost:send_precooked_email method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">email_subject</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">emailed_to</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">email_subject</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Static info models #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCollege\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollege\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollege</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;A SciPost Editorial College for a specific discipline.&#39;&#39;&#39;</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">discipline</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EditorialCollegeFellowship\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollegeFellowship\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollegeFellowship</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Editorial College Fellowship connecting Editorial College and Contributors,</span>\n<span class=\"sd\">    maybe with a limiting start/until date.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.EditorialCollege&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">affiliation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">FellowManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;college&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;until_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"fm\">__str__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_active</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">True</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span>\n        <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"ow\">and</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/scipost/models", "title": "scipost.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/scipost/views.fjson b/docs/codebase/_build/json/_modules/scipost/views.fjson
index 92ed834f5eed120c83072bf42fceb80d6b638c04..f2a371898c22450c6b3fffbabd71198080b35e71 100644
--- a/docs/codebase/_build/json/_modules/scipost/views.fjson
+++ b/docs/codebase/_build/json/_modules/scipost/views.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/scipost/views", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for scipost.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">login</span><span class=\"p\">,</span> <span class=\"n\">logout</span><span class=\"p\">,</span> <span class=\"n\">update_session_auth_hash</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">user_passes_test</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.views</span> <span class=\"k\">import</span> <span class=\"n\">password_reset</span><span class=\"p\">,</span> <span class=\"n\">password_reset_confirm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"k\">import</span> <span class=\"n\">mail</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span><span class=\"p\">,</span> <span class=\"n\">EmailMultiAlternatives</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Prefetch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Context</span><span class=\"p\">,</span> <span class=\"n\">Template</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.http</span> <span class=\"k\">import</span> <span class=\"n\">require_POST</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.debug</span> <span class=\"k\">import</span> <span class=\"n\">cleanse_setting</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.static</span> <span class=\"k\">import</span> <span class=\"n\">serve</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">haystack.generic_views</span> <span class=\"k\">import</span> <span class=\"n\">SearchView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">,</span> <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.decorators</span> <span class=\"k\">import</span> <span class=\"n\">has_contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">AuthorshipClaim</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollege</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollegeFellowship</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SearchForm</span><span class=\"p\">,</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">,</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">,</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">,</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">,</span> <span class=\"n\">SendPrecookedEmailForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">Utils</span><span class=\"p\">,</span> <span class=\"n\">EMAIL_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">affiliations.forms</span> <span class=\"k\">import</span> <span class=\"n\">AffiliationsFormset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">news.models</span> <span class=\"k\">import</span> <span class=\"n\">NewsItem</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span>\\\n                               <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">partners.models</span> <span class=\"k\">import</span> <span class=\"n\">MembershipAgreement</span>\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n\n<span class=\"c1\">##############</span>\n<span class=\"c1\"># Utilitites #</span>\n<span class=\"c1\">##############</span>\n\n<div class=\"viewcode-block\" id=\"is_registered\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.is_registered\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method checks if user is activated assuming an validated user</span>\n<span class=\"sd\">    has at least one permission group (`Registered Contributor` or `Partner Accounts`).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SearchView</span><span class=\"p\">(</span><span class=\"n\">SearchView</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;search/search.html&#39;</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">SearchForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;search_query&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;q&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;results_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Methods not supported by Whoosh engine</span>\n        <span class=\"c1\"># ctx[&#39;stats_results&#39;] = kwargs[&#39;object_list&#39;].stats_results()</span>\n        <span class=\"c1\"># ctx[&#39;facet_counts&#39;] = kwargs[&#39;object_list&#39;].facet(&#39;text&#39;).facet_counts()</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"c1\">#############</span>\n<span class=\"c1\"># Main view</span>\n<span class=\"c1\">#############</span>\n\n<div class=\"viewcode-block\" id=\"index\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.index\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main page.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;latest_newsitem&#39;</span><span class=\"p\">:</span> <span class=\"n\">NewsItem</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">on_homepage</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                                 <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;current_agreements&#39;</span><span class=\"p\">:</span> <span class=\"n\">MembershipAgreement</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">now_active</span><span class=\"p\">(),</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/index.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"protected_serve\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.protected_serve\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">protected_serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!</span>\n<span class=\"sd\">    This will be usefull eg. in the admin pages.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Only superusers may get to see secure files without an explicit serve method!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n    <span class=\"n\">document_root</span> <span class=\"o\">=</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT_SECURE</span>\n    <span class=\"k\">return</span> <span class=\"n\">serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">document_root</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Information</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">feeds</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject_areas_physics&#39;</span><span class=\"p\">:</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/feeds.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Contributors:</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"register\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.register\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">register</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This public registration view shows and processes the form</span>\n<span class=\"sd\">    that will create new user account requests. After registration</span>\n<span class=\"sd\">    the Contributor will need to activate its account via the mail</span>\n<span class=\"sd\">    sent. After activation the user needs to be vetted by the SciPost</span>\n<span class=\"sd\">    admin.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">create_and_save_contributor</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_registration_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Disable invitations related to the new Contributor</span>\n        <span class=\"n\">RegistrationInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">declined_or_without_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_REGISTERED</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Thanks for registering to SciPost.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You will receive an email with a link to verify &#39;</span>\n                            <span class=\"s1\">&#39;your email address. &#39;</span>\n                            <span class=\"s1\">&#39;Please visit this link within 48 hours. &#39;</span>\n                            <span class=\"s1\">&#39;Your credentials will thereafter be verified. &#39;</span>\n                            <span class=\"s1\">&#39;If your registration is vetted through by the &#39;</span>\n                            <span class=\"s1\">&#39;administrators, you will be enabled to contribute.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"s1\">&#39;invited&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"invitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If a scientist has recieved an invitation (RegistrationInvitation)</span>\n<span class=\"sd\">    he/she will finish it&#39;s invitation via still view which will prefill</span>\n<span class=\"sd\">    the default registration form.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RegistrationInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">has_responded</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This invitation token has already been used, &#39;</span>\n                        <span class=\"s1\">&#39;or this email address is already associated to a registration.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The invitation key has expired.&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/accept_invitation_error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"activation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.activation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">activation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    After registration, an email verification link is sent.</span>\n<span class=\"sd\">    Once clicked, the account is activated.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:request_new_activation_link&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                <span class=\"s1\">&#39;contributor_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">key</span>\n            <span class=\"p\">}))</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Many thanks for confirming your email address.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your SciPost account will soon be vetted by &#39;</span>\n                                   <span class=\"s1\">&#39;an administrator, after which you will be able to log in. &#39;</span>\n                                   <span class=\"s1\">&#39;You will soon receive an email confirmation from us!&#39;</span><span class=\"p\">),</span>\n                   <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your email has already been confirmed.&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;Please wait for vetting of your registration.&#39;</span>\n                               <span class=\"s1\">&#39; We shall strive to send you an update by email within 24 hours.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"request_new_activation_link\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.request_new_activation_link\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">request_new_activation_link</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Once a user tries to activate its account using the email verification link sent</span>\n<span class=\"sd\">    and the key has expired, the user redirected to possibly request a new token.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Generate a new email activation key and link</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;We have emailed you a new activation link.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Please acknowledge it within its 48 hours validity &#39;</span>\n                            <span class=\"s1\">&#39;window if you want us to proceed with vetting your registration.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/request_new_activation_link.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"unsubscribe\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.unsubscribe\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">unsubscribe</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The link to this method is included in all email communications</span>\n<span class=\"sd\">    with a Contributor. The key used is the original activation key.</span>\n<span class=\"sd\">    At this link, the Contributor can confirm that he/she does not</span>\n<span class=\"sd\">    want to receive any non-essential email notifications from SciPost.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;We have recorded your preference&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;You will no longer receive non-essential email from SciPost.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unsubscribe.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">})</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributors_to_vet</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                           <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                           <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributors_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_request_ack</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># process the form</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">promote_to_registered_contributor</span><span class=\"p\">():</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Registered Contributors&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">group</span><span class=\"p\">)</span>\n            <span class=\"c1\"># Verify if there is a pending refereeing invitation</span>\n            <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                    <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span> <span class=\"n\">cancelled</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been accepted. &#39;</span>\n                          <span class=\"s1\">&#39;You can now login at https://scipost.org and contribute. </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">pending_ref_inv_exists</span><span class=\"p\">:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;Note that you have pending refereeing invitations; please navigate to &#39;</span>\n                    <span class=\"s1\">&#39;https://scipost.org/submissions/accept_or_decline_ref_invitations &#39;</span>\n                    <span class=\"s1\">&#39;(login required) to accept or decline them.</span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Thank you very much in advance, </span><span class=\"se\">\\n</span><span class=\"s1\">The SciPost Team.&#39;</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration accepted&#39;</span><span class=\"p\">,</span> <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">ref_reason</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been turned down, the reason being: &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">[</span><span class=\"n\">ref_reason</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;. You can however still view &#39;</span>\n                          <span class=\"s1\">&#39;all SciPost contents, just not submit papers, &#39;</span>\n                          <span class=\"s1\">&#39;comments or votes. We nonetheless thank you for your interest.&#39;</span>\n                          <span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">The SciPost Team.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Further explanations: &#39;</span>\n                               <span class=\"o\">+</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration: unsuccessful&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Registration request vetted.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_registration_requests&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    List all inactive users. These are users that have filled the registration form,</span>\n<span class=\"sd\">    but did not yet activate their account using the validation email.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">inactive_contributors</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span>\n                             <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span>\n                             <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;inactive_contributors&#39;</span><span class=\"p\">:</span> <span class=\"n\">inactive_contributors</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;now&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests_reset\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests_reset\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Reset specific activation_key for Contributor and resend activation mail.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;New key successfully generated and sent to &lt;i&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/i&gt;&#39;</span>\n                               <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:registration_requests&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"login_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.login_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">login_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view shows and processes a user&#39;s login session.</span>\n\n<span class=\"sd\">    The function based method login() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">authenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">user</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n                <span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">)</span>\n                <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_redirect_url</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account has not yet been vetted. &#39;</span>\n                                      <span class=\"s1\">&#39;(our admins will verify your credentials very soon)&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">user_is_inactive</span><span class=\"p\">():</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account is not yet activated. &#39;</span>\n                                  <span class=\"s1\">&#39;Please first activate your account.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invalid username/password.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/login.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"logout_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.logout_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">logout_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The function based method logout() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">logout</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Keep contributing!&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;You are now logged out of SciPost.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"mark_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.mark_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">mark_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Mark period unavailable for Contributor using this view.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav_form</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period registered&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Template acts as a backup in case the form is invalid.</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">unav_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unavailability_period_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"delete_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.delete_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">delete_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">period_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Delete period unavailable registered.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\n                             <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">period_id</span><span class=\"p\">))</span>\n    <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Account</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unavailability_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;unavailabilities&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">future</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/account.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Editorial Actions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">permission</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span>\n        <span class=\"s1\">&#39;Ambassadors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Advisory Board&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Junior Ambassadors&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">permission</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_SP_Admin</span><span class=\"p\">():</span>\n        <span class=\"c1\"># count the number of pending registration requests</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_awaiting_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submissions_to_assign&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prescreening</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_recommendations_to_prepare_for_voting&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__status</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_in_preparation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_VE</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_page_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                                         <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">())</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_comments_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesislink_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_authorship_claims_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_MEC</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_assignments_to_consider&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;active_assignments&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__editor_in_charge</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_EdCol_Admin</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pdf_report</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_treated_submissions_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/editorial_actions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Refereeing</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/refereeing.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Publications</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_publication_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/publications.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Submissions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submission_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/submissions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Commentaries</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">commentaries</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/commentaries.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Theses</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesis_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_thesislinks&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">theses</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/theses.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Comments</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Author Replies</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/author_replies.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"personal_page\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.personal_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">personal_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">tab</span><span class=\"o\">=</span><span class=\"s1\">&#39;account&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page is the main view for accessing user functions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;account&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;editorial_actions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;refereeing&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;tab&#39;</span><span class=\"p\">:</span> <span class=\"n\">tab</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">!=</span> <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n    <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Refereeing</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">in_process</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refereeing_tab_total_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">refereeing_tab_total_count</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/personal_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">change_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save_new_password</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Update user&#39;s session hash to stay logged in.</span>\n        <span class=\"n\">update_session_auth_hash</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your SciPost password has been successfully changed&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;partners:dashboard&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/change_password.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_confirm.html&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"n\">uidb64</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"n\">token</span><span class=\"p\">,</span>\n                                  <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">email_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_email.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">subject_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_subject.txt&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">institution_formset</span> <span class=\"o\">=</span> <span class=\"n\">AffiliationsFormset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">sync_lists</span><span class=\"p\">()</span>\n        <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;orcid_id&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">changed_data</span><span class=\"p\">:</span>\n            <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">propagate_orcid</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;cont_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">cont_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;institution_formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">institution_formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">update_personal_data</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">has_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"claim_authorships\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.claim_authorships\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">claim_authorships</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The system auto-detects potential authorships (of submissions,</span>\n<span class=\"sd\">    papers subject to commentaries, theses, ...).</span>\n<span class=\"sd\">    The contributor must confirm/deny authorship from the</span>\n<span class=\"sd\">    Personal Page.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">publication_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                        <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">pub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">submission_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">sub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">commentary_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">com_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">thesis_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                   <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">thesis_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;pub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">pub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;sub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">sub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;commentary_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;com_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">com_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_auth_claim_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/claim_authorships.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_pub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_sub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">submission_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_com_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_thesis_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">thesis_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">thesis_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">thesislink</span><span class=\"o\">=</span><span class=\"n\">thesislink</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claims</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">claims_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;claims_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">claims_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_authorship_claims.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claim</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">claim_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">vetting_contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">claim_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">claim_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                    <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_as_cont</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">vetting_contributor</span>\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_authorship_claims&#39;</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"contributor_info\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.contributor_info\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">contributor_info</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All visitors can see a digest of a</span>\n<span class=\"sd\">    Contributor&#39;s activities/contributions by clicking</span>\n<span class=\"sd\">    on the relevant name (in listing headers of Submissions, ...).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_unlisted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_commentaries</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_theses</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                            <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor_authorreplies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                                 <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_publications</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_submissions</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_commentaries&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_commentaries</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_theses&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_theses</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_comments</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_authorreplies</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/contributor_info.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">####################</span>\n<span class=\"c1\"># Email facilities #</span>\n<span class=\"c1\">####################</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_group_members&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_group_members\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_group_members\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_group_members</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send bulk emails to (members of) selected groups</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">group_members</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">user_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">group_members</span><span class=\"p\">,</span> <span class=\"mi\">32</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">pagenr</span> <span class=\"ow\">in</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page_range</span><span class=\"p\">:</span>\n            <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">pagenr</span><span class=\"p\">)</span>\n            <span class=\"k\">with</span> <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">get_connection</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">connection</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">member</span> <span class=\"ow\">in</span> <span class=\"n\">page</span><span class=\"o\">.</span><span class=\"n\">object_list</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span><span class=\"p\">:</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personalize&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span>\n                                          <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Dear {{ title }} {{ last_name }},&lt;br/&gt;&#39;</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">EMAIL_FOOTER</span>\n                        <span class=\"n\">url_unsubscribe</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:unsubscribe&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">])</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such emails? &#39;</span>\n                                       <span class=\"s1\">&#39;Unsubscribe by visiting </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;&lt;br/&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;p style=&quot;font-size: 10px;&quot;&gt;Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such &#39;</span>\n                            <span class=\"s1\">&#39;emails? &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;Unsubscribe&lt;/a&gt;.&lt;/p&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                            <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                            <span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">],</span>\n                            <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">,</span>\n                        <span class=\"p\">}</span>\n                        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n                        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n                        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                            <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span> <span class=\"n\">connection</span><span class=\"o\">=</span><span class=\"n\">connection</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_group_members.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_particular\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_particular\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_particular</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n            <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]}</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n            <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n            <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n            <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n                <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_particular.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"send_precooked_email\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.send_precooked_email\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_precooked_email</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send precooked emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SendPrecookedEmailForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">precookedEmail</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_option&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This message has already been sent to this address&#39;</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text</span>\n        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text_html</span><span class=\"p\">}</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n            <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_subject</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;from_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/send_precooked_email.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">#####################</span>\n<span class=\"c1\"># Editorial College #</span>\n<span class=\"c1\">#####################</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">EdCol_bylaws</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/EdCol_by-laws.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"k\">def</span> <span class=\"nf\">Fellow_activity_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;editorial_assignments&#39;</span><span class=\"p\">)</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;user__last_name&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;fellows&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">fellow</span> <span class=\"o\">=</span> <span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">fellow</span>\n\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_ongoing&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                              <span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n                                              <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_completed&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                                <span class=\"o\">.</span><span class=\"n\">completed</span><span class=\"p\">()</span>\n                                                <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/Fellow_activity_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AboutView</span><span class=\"p\">(</span><span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost/about.html&#39;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n                <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">,</span>\n                         <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">EditorialCollegeFellowship</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;contributor__user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;contributor__user__last_name&#39;</span><span class=\"p\">),</span>\n                         <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s1\">&#39;current_fellows&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">object_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">college</span> <span class=\"ow\">in</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">college</span><span class=\"p\">)]</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"n\">object_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span>\n                <span class=\"n\">college</span><span class=\"p\">,</span>\n                <span class=\"n\">spec_list</span><span class=\"p\">,</span>\n            <span class=\"p\">))</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">object_list</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<div class=\"viewcode-block\" id=\"csrf_failure\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.csrf_failure\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">csrf_failure</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">reason</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Custom CSRF Failure. Informing admins via email as well.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Filter out privacy data</span>\n    <span class=\"n\">post_data</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">key</span><span class=\"p\">:</span>\n            <span class=\"n\">post_data</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">cleanse_setting</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Email content</span>\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">reason</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;USER&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;GET&#39;</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span> <span class=\"n\">post_data</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;META&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">META</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n        <span class=\"s1\">&#39;COOKIES&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">COOKIES</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">body</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">mail_admins</span><span class=\"p\">(</span><span class=\"s1\">&#39;CSRF Failure&#39;</span><span class=\"p\">,</span> <span class=\"n\">body</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;csrf-failure.html&#39;</span><span class=\"p\">)</span></div>\n</pre></div>", "sidebars": null, "title": "scipost.views"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for scipost.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">login</span><span class=\"p\">,</span> <span class=\"n\">logout</span><span class=\"p\">,</span> <span class=\"n\">update_session_auth_hash</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">user_passes_test</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.views</span> <span class=\"k\">import</span> <span class=\"n\">password_reset</span><span class=\"p\">,</span> <span class=\"n\">password_reset_confirm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"k\">import</span> <span class=\"n\">mail</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span><span class=\"p\">,</span> <span class=\"n\">EmailMultiAlternatives</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Prefetch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Context</span><span class=\"p\">,</span> <span class=\"n\">Template</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.http</span> <span class=\"k\">import</span> <span class=\"n\">require_POST</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.debug</span> <span class=\"k\">import</span> <span class=\"n\">cleanse_setting</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.static</span> <span class=\"k\">import</span> <span class=\"n\">serve</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">haystack.generic_views</span> <span class=\"k\">import</span> <span class=\"n\">SearchView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">,</span> <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.decorators</span> <span class=\"k\">import</span> <span class=\"n\">has_contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">AuthorshipClaim</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollege</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollegeFellowship</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SearchForm</span><span class=\"p\">,</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">,</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">,</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">,</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">,</span> <span class=\"n\">SendPrecookedEmailForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">Utils</span><span class=\"p\">,</span> <span class=\"n\">EMAIL_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">affiliations.forms</span> <span class=\"k\">import</span> <span class=\"n\">AffiliationsFormset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">news.models</span> <span class=\"k\">import</span> <span class=\"n\">NewsItem</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span>\\\n                               <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">partners.models</span> <span class=\"k\">import</span> <span class=\"n\">MembershipAgreement</span>\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n\n<span class=\"c1\">##############</span>\n<span class=\"c1\"># Utilitites #</span>\n<span class=\"c1\">##############</span>\n\n<div class=\"viewcode-block\" id=\"is_registered\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.is_registered\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method checks if user is activated assuming an validated user</span>\n<span class=\"sd\">    has at least one permission group (`Registered Contributor` or `Partner Accounts`).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SearchView</span><span class=\"p\">(</span><span class=\"n\">SearchView</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;search/search.html&#39;</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">SearchForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;search_query&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;q&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;results_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Methods not supported by Whoosh engine</span>\n        <span class=\"c1\"># ctx[&#39;stats_results&#39;] = kwargs[&#39;object_list&#39;].stats_results()</span>\n        <span class=\"c1\"># ctx[&#39;facet_counts&#39;] = kwargs[&#39;object_list&#39;].facet(&#39;text&#39;).facet_counts()</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"c1\">#############</span>\n<span class=\"c1\"># Main view</span>\n<span class=\"c1\">#############</span>\n\n<div class=\"viewcode-block\" id=\"index\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.index\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main page.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;latest_newsitem&#39;</span><span class=\"p\">:</span> <span class=\"n\">NewsItem</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">on_homepage</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                                 <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;current_agreements&#39;</span><span class=\"p\">:</span> <span class=\"n\">MembershipAgreement</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">now_active</span><span class=\"p\">(),</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/index.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"protected_serve\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.protected_serve\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">protected_serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!</span>\n<span class=\"sd\">    This will be usefull eg. in the admin pages.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Only superusers may get to see secure files without an explicit serve method!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n    <span class=\"n\">document_root</span> <span class=\"o\">=</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT_SECURE</span>\n    <span class=\"k\">return</span> <span class=\"n\">serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">document_root</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Information</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">feeds</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject_areas_physics&#39;</span><span class=\"p\">:</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/feeds.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Contributors:</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"register\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.register\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">register</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This public registration view shows and processes the form</span>\n<span class=\"sd\">    that will create new user account requests. After registration</span>\n<span class=\"sd\">    the Contributor will need to activate its account via the mail</span>\n<span class=\"sd\">    sent. After activation the user needs to be vetted by the SciPost</span>\n<span class=\"sd\">    admin.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">create_and_save_contributor</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_registration_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Disable invitations related to the new Contributor</span>\n        <span class=\"n\">RegistrationInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">declined_or_without_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_REGISTERED</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Thanks for registering to SciPost.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You will receive an email with a link to verify &#39;</span>\n                            <span class=\"s1\">&#39;your email address. &#39;</span>\n                            <span class=\"s1\">&#39;Please visit this link within 48 hours. &#39;</span>\n                            <span class=\"s1\">&#39;Your credentials will thereafter be verified. &#39;</span>\n                            <span class=\"s1\">&#39;If your registration is vetted through by the &#39;</span>\n                            <span class=\"s1\">&#39;administrators, you will be enabled to contribute.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"s1\">&#39;invited&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"invitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If a scientist has recieved an invitation (RegistrationInvitation)</span>\n<span class=\"sd\">    he/she will finish it&#39;s invitation via still view which will prefill</span>\n<span class=\"sd\">    the default registration form.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RegistrationInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">has_responded</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This invitation token has already been used, &#39;</span>\n                        <span class=\"s1\">&#39;or this email address is already associated to a registration.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The invitation key has expired.&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/accept_invitation_error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"activation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.activation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">activation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    After registration, an email verification link is sent.</span>\n<span class=\"sd\">    Once clicked, the account is activated.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:request_new_activation_link&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                <span class=\"s1\">&#39;contributor_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">key</span>\n            <span class=\"p\">}))</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Many thanks for confirming your email address.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your SciPost account will soon be vetted by &#39;</span>\n                                   <span class=\"s1\">&#39;an administrator, after which you will be able to log in. &#39;</span>\n                                   <span class=\"s1\">&#39;You will soon receive an email confirmation from us!&#39;</span><span class=\"p\">),</span>\n                   <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your email has already been confirmed.&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;Please wait for vetting of your registration.&#39;</span>\n                               <span class=\"s1\">&#39; We shall strive to send you an update by email within 24 hours.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"request_new_activation_link\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.request_new_activation_link\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">request_new_activation_link</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Once a user tries to activate its account using the email verification link sent</span>\n<span class=\"sd\">    and the key has expired, the user redirected to possibly request a new token.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Generate a new email activation key and link</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;We have emailed you a new activation link.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Please acknowledge it within its 48 hours validity &#39;</span>\n                            <span class=\"s1\">&#39;window if you want us to proceed with vetting your registration.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/request_new_activation_link.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"unsubscribe\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.unsubscribe\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">unsubscribe</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The link to this method is included in all email communications</span>\n<span class=\"sd\">    with a Contributor. The key used is the original activation key.</span>\n<span class=\"sd\">    At this link, the Contributor can confirm that he/she does not</span>\n<span class=\"sd\">    want to receive any non-essential email notifications from SciPost.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;We have recorded your preference&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;You will no longer receive non-essential email from SciPost.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unsubscribe.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">})</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributors_to_vet</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                           <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                           <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributors_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_request_ack</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># process the form</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">promote_to_registered_contributor</span><span class=\"p\">():</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Registered Contributors&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">group</span><span class=\"p\">)</span>\n            <span class=\"c1\"># Verify if there is a pending refereeing invitation</span>\n            <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                    <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span> <span class=\"n\">cancelled</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been accepted. &#39;</span>\n                          <span class=\"s1\">&#39;You can now login at https://scipost.org and contribute. </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">pending_ref_inv_exists</span><span class=\"p\">:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;Note that you have pending refereeing invitations; please navigate to &#39;</span>\n                    <span class=\"s1\">&#39;https://scipost.org/submissions/accept_or_decline_ref_invitations &#39;</span>\n                    <span class=\"s1\">&#39;(login required) to accept or decline them.</span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Thank you very much in advance, </span><span class=\"se\">\\n</span><span class=\"s1\">The SciPost Team.&#39;</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration accepted&#39;</span><span class=\"p\">,</span> <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">ref_reason</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been turned down, the reason being: &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">[</span><span class=\"n\">ref_reason</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;. You can however still view &#39;</span>\n                          <span class=\"s1\">&#39;all SciPost contents, just not submit papers, &#39;</span>\n                          <span class=\"s1\">&#39;comments or votes. We nonetheless thank you for your interest.&#39;</span>\n                          <span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">The SciPost Team.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Further explanations: &#39;</span>\n                               <span class=\"o\">+</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration: unsuccessful&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Registration request vetted.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_registration_requests&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    List all inactive users. These are users that have filled the registration form,</span>\n<span class=\"sd\">    but did not yet activate their account using the validation email.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">inactive_contributors</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span>\n                             <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span>\n                             <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;inactive_contributors&#39;</span><span class=\"p\">:</span> <span class=\"n\">inactive_contributors</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;now&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests_reset\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests_reset\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Reset specific activation_key for Contributor and resend activation mail.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;New key successfully generated and sent to &lt;i&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/i&gt;&#39;</span>\n                               <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:registration_requests&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"login_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.login_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">login_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view shows and processes a user&#39;s login session.</span>\n\n<span class=\"sd\">    The function based method login() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">authenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">user</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n                <span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">)</span>\n                <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_redirect_url</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account has not yet been vetted. &#39;</span>\n                                      <span class=\"s1\">&#39;(our admins will verify your credentials very soon)&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">user_is_inactive</span><span class=\"p\">():</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account is not yet activated. &#39;</span>\n                                  <span class=\"s1\">&#39;Please first activate your account.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invalid username/password.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/login.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"logout_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.logout_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">logout_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The function based method logout() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">logout</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Keep contributing!&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;You are now logged out of SciPost.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"mark_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.mark_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">mark_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Mark period unavailable for Contributor using this view.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav_form</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period registered&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Template acts as a backup in case the form is invalid.</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">unav_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unavailability_period_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"delete_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.delete_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">delete_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">period_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Delete period unavailable registered.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\n                             <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">period_id</span><span class=\"p\">))</span>\n    <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Account</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unavailability_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;unavailabilities&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">future</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/account.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Editorial Actions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">permission</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span>\n        <span class=\"s1\">&#39;Ambassadors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Advisory Board&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Junior Ambassadors&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">permission</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_SP_Admin</span><span class=\"p\">():</span>\n        <span class=\"c1\"># count the number of pending registration requests</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_awaiting_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submissions_to_assign&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prescreening</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_recommendations_to_prepare_for_voting&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__status</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_in_preparation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_VE</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_page_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                                         <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">())</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_comments_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesislink_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_authorship_claims_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_MEC</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_assignments_to_consider&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;active_assignments&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__editor_in_charge</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_EdCol_Admin</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pdf_report</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_treated_submissions_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/editorial_actions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Refereeing</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/refereeing.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Publications</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_publication_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/publications.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Submissions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submission_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/submissions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Commentaries</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">commentaries</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/commentaries.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Theses</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesis_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_thesislinks&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">theses</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/theses.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Comments</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Author Replies</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/author_replies.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"personal_page\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.personal_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">personal_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">tab</span><span class=\"o\">=</span><span class=\"s1\">&#39;account&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page is the main view for accessing user functions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;account&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;editorial_actions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;refereeing&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;tab&#39;</span><span class=\"p\">:</span> <span class=\"n\">tab</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">!=</span> <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n    <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Refereeing</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">in_process</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refereeing_tab_total_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">refereeing_tab_total_count</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/personal_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">change_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save_new_password</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Update user&#39;s session hash to stay logged in.</span>\n        <span class=\"n\">update_session_auth_hash</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your SciPost password has been successfully changed&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;partners:dashboard&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/change_password.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_confirm.html&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"n\">uidb64</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"n\">token</span><span class=\"p\">,</span>\n                                  <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">email_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_email.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">subject_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_subject.txt&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">institution_formset</span> <span class=\"o\">=</span> <span class=\"n\">AffiliationsFormset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">sync_lists</span><span class=\"p\">()</span>\n        <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;orcid_id&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">changed_data</span><span class=\"p\">:</span>\n            <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">propagate_orcid</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;cont_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">cont_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;institution_formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">institution_formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">update_personal_data</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">has_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"claim_authorships\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.claim_authorships\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">claim_authorships</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The system auto-detects potential authorships (of submissions,</span>\n<span class=\"sd\">    papers subject to commentaries, theses, ...).</span>\n<span class=\"sd\">    The contributor must confirm/deny authorship from the</span>\n<span class=\"sd\">    Personal Page.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">publication_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                        <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">pub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">submission_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">sub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">commentary_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">com_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">thesis_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                   <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">thesis_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;pub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">pub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;sub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">sub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;commentary_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;com_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">com_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_auth_claim_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/claim_authorships.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_pub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_sub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">submission_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_com_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_thesis_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">thesis_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">thesis_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">thesislink</span><span class=\"o\">=</span><span class=\"n\">thesislink</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claims</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">claims_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;claims_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">claims_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_authorship_claims.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claim</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">claim_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">vetting_contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">claim_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">claim_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                    <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_as_cont</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">vetting_contributor</span>\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_authorship_claims&#39;</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"contributor_info\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.contributor_info\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">contributor_info</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All visitors can see a digest of a</span>\n<span class=\"sd\">    Contributor&#39;s activities/contributions by clicking</span>\n<span class=\"sd\">    on the relevant name (in listing headers of Submissions, ...).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_unlisted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_commentaries</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_theses</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                            <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor_authorreplies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                                 <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_publications</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_submissions</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_commentaries&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_commentaries</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_theses&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_theses</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_comments</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_authorreplies</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/contributor_info.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">####################</span>\n<span class=\"c1\"># Email facilities #</span>\n<span class=\"c1\">####################</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_group_members&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_group_members\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_group_members\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_group_members</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send bulk emails to (members of) selected groups</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">group_members</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">user_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">group_members</span><span class=\"p\">,</span> <span class=\"mi\">32</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">pagenr</span> <span class=\"ow\">in</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page_range</span><span class=\"p\">:</span>\n            <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">pagenr</span><span class=\"p\">)</span>\n            <span class=\"k\">with</span> <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">get_connection</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">connection</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">member</span> <span class=\"ow\">in</span> <span class=\"n\">page</span><span class=\"o\">.</span><span class=\"n\">object_list</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span><span class=\"p\">:</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personalize&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span>\n                                          <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Dear {{ title }} {{ last_name }},&lt;br/&gt;&#39;</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">EMAIL_FOOTER</span>\n                        <span class=\"n\">url_unsubscribe</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:unsubscribe&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">])</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such emails? &#39;</span>\n                                       <span class=\"s1\">&#39;Unsubscribe by visiting </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;&lt;br/&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;p style=&quot;font-size: 10px;&quot;&gt;Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such &#39;</span>\n                            <span class=\"s1\">&#39;emails? &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;Unsubscribe&lt;/a&gt;.&lt;/p&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                            <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                            <span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">],</span>\n                            <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">,</span>\n                        <span class=\"p\">}</span>\n                        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n                        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n                        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                            <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span> <span class=\"n\">connection</span><span class=\"o\">=</span><span class=\"n\">connection</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_group_members.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_particular\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_particular\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_particular</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n            <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]}</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n            <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n            <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n            <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n                <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_particular.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"send_precooked_email\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.send_precooked_email\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_precooked_email</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send precooked emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SendPrecookedEmailForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">precookedEmail</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_option&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This message has already been sent to this address&#39;</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text</span>\n        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text_html</span><span class=\"p\">}</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n            <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_subject</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;from_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/send_precooked_email.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">#####################</span>\n<span class=\"c1\"># Editorial College #</span>\n<span class=\"c1\">#####################</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">EdCol_bylaws</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/EdCol_by-laws.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"k\">def</span> <span class=\"nf\">Fellow_activity_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;editorial_assignments&#39;</span><span class=\"p\">)</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;user__last_name&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;fellows&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">fellow</span> <span class=\"o\">=</span> <span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">fellow</span>\n\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_ongoing&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                              <span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n                                              <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_completed&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                                <span class=\"o\">.</span><span class=\"n\">completed</span><span class=\"p\">()</span>\n                                                <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/Fellow_activity_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AboutView</span><span class=\"p\">(</span><span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost/about.html&#39;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n                <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">,</span>\n                         <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">EditorialCollegeFellowship</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;contributor__user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;contributor__user__last_name&#39;</span><span class=\"p\">),</span>\n                         <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s1\">&#39;current_fellows&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">object_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">college</span> <span class=\"ow\">in</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">college</span><span class=\"p\">)]</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"n\">object_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span>\n                <span class=\"n\">college</span><span class=\"p\">,</span>\n                <span class=\"n\">spec_list</span><span class=\"p\">,</span>\n            <span class=\"p\">))</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">object_list</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<div class=\"viewcode-block\" id=\"csrf_failure\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.csrf_failure\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">csrf_failure</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">reason</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Custom CSRF Failure. Informing admins via email as well.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Filter out privacy data</span>\n    <span class=\"n\">post_data</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">key</span><span class=\"p\">:</span>\n            <span class=\"n\">post_data</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">cleanse_setting</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Email content</span>\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">reason</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;USER&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;GET&#39;</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span> <span class=\"n\">post_data</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;META&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">META</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n        <span class=\"s1\">&#39;COOKIES&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">COOKIES</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">body</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">mail_admins</span><span class=\"p\">(</span><span class=\"s1\">&#39;CSRF Failure&#39;</span><span class=\"p\">,</span> <span class=\"n\">body</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;csrf-failure.html&#39;</span><span class=\"p\">)</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/scipost/views", "title": "scipost.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/submissions/models.fjson b/docs/codebase/_build/json/_modules/submissions/models.fjson
index 4f05fbea80129c2f8f56000e364697aaec0e3354..2677fcd9aee0c9279b6ca6c99f8a584f1fe5a9e5 100644
--- a/docs/codebase/_build/json/_modules/submissions/models.fjson
+++ b/docs/codebase/_build/json/_modules/submissions/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/submissions/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for submissions.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Q</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionRelatedObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span> <span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span> <span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span> <span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_REC</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span> <span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_NORMAL</span><span class=\"p\">,</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">ReportQuerySet</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">EditorialCommunicationQueryset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">,</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">GeneralSubmissionCycle</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">TITLE_CHOICES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n\n\n<div class=\"viewcode-block\" id=\"Submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Submission</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Submission is a SciPost register of an ArXiv article. This object is the central</span>\n<span class=\"sd\">    instance for every action, recommendation, communication, etc. etc. that is related to the</span>\n<span class=\"sd\">    refereeing cycle of a Submission. A possible Publication object is later directly related</span>\n<span class=\"sd\">    to this Submission instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">author_comments</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;EIC&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                         <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">is_current</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">is_resubmission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">list_of_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_suggested</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Refereeing fields</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">)</span>\n    <span class=\"n\">refereeing_cycle</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span>\n                                        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">)</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">submitted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submitted_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_pool&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Replace this by foreignkey?</span>\n    <span class=\"n\">submitted_to_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span>\n                                            <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Journal to be submitted to&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">proceedings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;proceedings.Proceedings&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># iThenticate Reports</span>\n    <span class=\"n\">plagiarism_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.iThenticateReport&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET_NULL</span><span class=\"p\">,</span>\n                                             <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Arxiv identifiers with/without version number</span>\n    <span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000v0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier_wo_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">pdf_refereeing_pack</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REFEREE/%Y/%m/&#39;</span><span class=\"p\">,</span>\n                                           <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">app_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Fill `arxiv_identifier_w_vn_nr` as a dummy field for convenience</span>\n        <span class=\"n\">arxiv_w_vn</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{arxiv}</span><span class=\"s1\">v</span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">arxiv_w_vn</span>\n\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_current</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (current version)&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (deprecated version &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (published as </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">))&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n<div class=\"viewcode-block\" id=\"Submission.touch\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.touch\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">touch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Update latest activity as a service &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"Submission.comments_set_complete\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.comments_set_complete\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">comments_set_complete</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return comments to Submission, comments on Reports of Submission and</span>\n<span class=\"sd\">        nested comments related to this Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_cycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Append the specific submission cycle to the instance to eventually handle the</span>\n<span class=\"sd\">        complete submission cycle outside the submission instance itself.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">GeneralSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">eic_recommendation_required</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">reporting_deadline_has_passed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">original_submission_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">submission_date</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">thread</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all versions of the Submission with that arxiv id.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission that are publicly accessible.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions_pool</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Underneath: All very inefficient methods as they initiate a new query</span>\n    <span class=\"k\">def</span> <span class=\"nf\">count_accepted_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_declined_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_pending_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_invited_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_contrib_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_obtained_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_general_event</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"SubmissionEvent\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.SubmissionEvent\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SubmissionEvent</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The SubmissionEvent&#39;s goal is to act as a messaging/logging model</span>\n<span class=\"sd\">    for the Submission cycle. Its main audience will be the author(s) and</span>\n<span class=\"sd\">    the Editor-in-charge of a Submission.</span>\n\n<span class=\"sd\">    Be aware!</span>\n<span class=\"sd\">    Both the author and editor-in-charge will read the submission event.</span>\n<span class=\"sd\">    Make sure the right text is given to the right event-type, to protect</span>\n<span class=\"sd\">    the fellow&#39;s identity.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;events&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_event_display</span><span class=\"p\">())</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialAssignment\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialAssignment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialAssignment</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    EditorialAssignment is a registration for Fellows of their duties of being a</span>\n<span class=\"sd\">    Editor-in-charge for a specific Submission. This model could start as a invitation only,</span>\n<span class=\"sd\">    which should then be accepted or declined by the invited.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># attribute `deprecated&#39; becomes True if another Fellow becomes Editor-in-charge</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">completed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_assignments&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to become EIC of &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, requested on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_created</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:assignment_request&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RefereeInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.RefereeInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email_address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"c1\"># if Contributor not found, person is invited to register</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">date_invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invited_by&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if a Report has been submitted</span>\n    <span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if EIC has deactivated invitation</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to referee &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, invited on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_invited</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">referee_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">related_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">reset_content</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports:</span>\n<span class=\"c1\">###########</span>\n\n<div class=\"viewcode-block\" id=\"Report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Report</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Both types of reports, invited or contributed.</span>\n\n<span class=\"sd\">    This Report model acts as both a regular `Report` and a `FollowupReport`; A normal Report</span>\n<span class=\"sd\">    should have all fields required, whereas a FollowupReport only has the `report` field as</span>\n<span class=\"sd\">    a required field.</span>\n\n<span class=\"sd\">    Important note!</span>\n<span class=\"sd\">    Due to the construction of the two different types within a single model, it is important</span>\n<span class=\"sd\">    to explicitly implement the perticular differences in for example the form used.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">)</span>\n    <span class=\"n\">report_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">REPORT_NORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"s1\">&#39;This number is a unique number &#39;</span>\n                                                           <span class=\"s1\">&#39;refeering to the Report nr. of &#39;</span>\n                                                           <span class=\"s1\">&#39;the Submission&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;report_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `invited&#39; filled from RefereeInvitation objects at moment of report submission</span>\n    <span class=\"n\">invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `flagged&#39; if author of report has been flagged by submission authors (surname check only)</span>\n    <span class=\"n\">flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">qualification</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Qualification to referee this: I am&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Text-based reporting</span>\n    <span class=\"n\">strengths</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">weaknesses</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Qualities:</span>\n    <span class=\"n\">validity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">significance</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                    <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">originality</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">clarity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                               <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">formatting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                          <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of paper formatting&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">grammar</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of English grammar&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pdf_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REPORTS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ReportQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;report_nr&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reports&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_in_draft</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_vetted</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Control Report count per Submission.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Report.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#report_&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_followup_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the</span>\n<span class=\"sd\">        author of the report already has a vetted report in the series of the specific Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">submission__arxiv_vn_nr__lt</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">())</span>\n\n<div class=\"viewcode-block\" id=\"Report.latest_report_from_series\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report.latest_report_from_series\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">latest_report_from_series</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get latest Report from the same author for the Submission series.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n                <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission__arxiv_identifier_wo_vn_nr&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span></div>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">associated_published_doi</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return the doi of the published object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;type&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;referee-report&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Report on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;reviewer&#39;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Report on arXiv:</span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n\n\n<span class=\"c1\">##########################</span>\n<span class=\"c1\"># EditorialCommunication #</span>\n<span class=\"c1\">##########################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCommunication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialCommunication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCommunication</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each individual communication between Editor-in-charge</span>\n<span class=\"sd\">    to and from Referees and Authors becomes an instance of this class.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationQueryset</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;timestamp&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_communications&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comtype</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39; for submission &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span>\n                   <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">output</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EICRecommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EICRecommendation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EICRecommendation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The EICRecommendation is the recommendation of a Submission written by</span>\n<span class=\"sd\">    the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by</span>\n<span class=\"sd\">    a subset of Fellows and should contain the actual publication decision.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eicrecommendations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editorial_college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the&#39;</span>\n                                                                  <span class=\"s1\">&#39; Editorial College&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">version</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Editorial Fellows who have assessed this recommendation:</span>\n    <span class=\"n\">eligible_to_vote</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                              <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eligible_to_vote&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_for</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_for&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_against</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_against&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_abstain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_abstain&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;version&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;version&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">{title}</span><span class=\"s1\"> by </span><span class=\"si\">{author}</span><span class=\"s1\">, </span><span class=\"si\">{recommendation}</span><span class=\"s1\"> version </span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">20</span><span class=\"p\">],</span>\n            <span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">(),</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">version</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># TODO: Fix this weird redirect, but it&#39;s neccesary for the notifications to have one.</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_for</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_against</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_abstained</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">may_be_reformulated</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Already reformulated before; please use the latest version</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"iThenticateReport\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">iThenticateReport</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    iThenticateReport is the SciPost register of an iThenticate report. It saves</span>\n<span class=\"sd\">    basic information coming from iThenticate into the SciPost database for easy access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">uploaded_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doc_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">part_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">percent_match</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Report&#39;</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Reports&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:plagiarism&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span>\n                            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"iThenticateReport.get_report_url\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport.get_report_url\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_report_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Request new read-only url from iThenticate and return.</span>\n\n<span class=\"sd\">        Note: The read-only link is valid for only 15 minutes, saving may be worthless</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n        <span class=\"kn\">from</span> <span class=\"nn\">.plagiarism</span> <span class=\"k\">import</span> <span class=\"n\">iThenticate</span>\n        <span class=\"n\">plagiarism</span> <span class=\"o\">=</span> <span class=\"n\">iThenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">plagiarism</span><span class=\"o\">.</span><span class=\"n\">get_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Report </span><span class=\"si\">{doc_id}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">doc_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doc_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; on Submission </span><span class=\"si\">{arxiv}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                        <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;commit&#39;</span><span class=\"p\">,</span> <span class=\"kc\">True</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">score</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">percent_match</span></div>\n</pre></div>", "sidebars": null, "title": "submissions.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for submissions.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Q</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionRelatedObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span> <span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span> <span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span> <span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_REC</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span> <span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_NORMAL</span><span class=\"p\">,</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">ReportQuerySet</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">EditorialCommunicationQueryset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">,</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">GeneralSubmissionCycle</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">TITLE_CHOICES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n\n\n<div class=\"viewcode-block\" id=\"Submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Submission</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Submission is a SciPost register of an ArXiv article. This object is the central</span>\n<span class=\"sd\">    instance for every action, recommendation, communication, etc. etc. that is related to the</span>\n<span class=\"sd\">    refereeing cycle of a Submission. A possible Publication object is later directly related</span>\n<span class=\"sd\">    to this Submission instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">author_comments</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;EIC&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                         <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">is_current</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">is_resubmission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">list_of_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_suggested</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Refereeing fields</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">)</span>\n    <span class=\"n\">refereeing_cycle</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span>\n                                        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">)</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">submitted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submitted_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_pool&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Replace this by foreignkey?</span>\n    <span class=\"n\">submitted_to_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span>\n                                            <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Journal to be submitted to&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">proceedings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;proceedings.Proceedings&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># iThenticate Reports</span>\n    <span class=\"n\">plagiarism_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.iThenticateReport&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET_NULL</span><span class=\"p\">,</span>\n                                             <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Arxiv identifiers with/without version number</span>\n    <span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000v0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier_wo_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">pdf_refereeing_pack</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REFEREE/%Y/%m/&#39;</span><span class=\"p\">,</span>\n                                           <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">app_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Fill `arxiv_identifier_w_vn_nr` as a dummy field for convenience</span>\n        <span class=\"n\">arxiv_w_vn</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{arxiv}</span><span class=\"s1\">v</span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">arxiv_w_vn</span>\n\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_current</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (current version)&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (deprecated version &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (published as </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">))&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n<div class=\"viewcode-block\" id=\"Submission.touch\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.touch\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">touch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Update latest activity as a service &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"Submission.comments_set_complete\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.comments_set_complete\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">comments_set_complete</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return comments to Submission, comments on Reports of Submission and</span>\n<span class=\"sd\">        nested comments related to this Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_cycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Append the specific submission cycle to the instance to eventually handle the</span>\n<span class=\"sd\">        complete submission cycle outside the submission instance itself.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">GeneralSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">eic_recommendation_required</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">reporting_deadline_has_passed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">original_submission_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">submission_date</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">thread</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all versions of the Submission with that arxiv id.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission that are publicly accessible.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions_pool</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Underneath: All very inefficient methods as they initiate a new query</span>\n    <span class=\"k\">def</span> <span class=\"nf\">count_accepted_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_declined_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_pending_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_invited_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_contrib_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_obtained_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_general_event</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"SubmissionEvent\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.SubmissionEvent\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SubmissionEvent</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The SubmissionEvent&#39;s goal is to act as a messaging/logging model</span>\n<span class=\"sd\">    for the Submission cycle. Its main audience will be the author(s) and</span>\n<span class=\"sd\">    the Editor-in-charge of a Submission.</span>\n\n<span class=\"sd\">    Be aware!</span>\n<span class=\"sd\">    Both the author and editor-in-charge will read the submission event.</span>\n<span class=\"sd\">    Make sure the right text is given to the right event-type, to protect</span>\n<span class=\"sd\">    the fellow&#39;s identity.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;events&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_event_display</span><span class=\"p\">())</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialAssignment\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialAssignment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialAssignment</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    EditorialAssignment is a registration for Fellows of their duties of being a</span>\n<span class=\"sd\">    Editor-in-charge for a specific Submission. This model could start as a invitation only,</span>\n<span class=\"sd\">    which should then be accepted or declined by the invited.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># attribute `deprecated&#39; becomes True if another Fellow becomes Editor-in-charge</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">completed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_assignments&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to become EIC of &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, requested on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_created</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:assignment_request&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RefereeInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.RefereeInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email_address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"c1\"># if Contributor not found, person is invited to register</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">date_invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invited_by&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if a Report has been submitted</span>\n    <span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if EIC has deactivated invitation</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to referee &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, invited on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_invited</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">referee_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">related_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">reset_content</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports:</span>\n<span class=\"c1\">###########</span>\n\n<div class=\"viewcode-block\" id=\"Report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Report</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Both types of reports, invited or contributed.</span>\n\n<span class=\"sd\">    This Report model acts as both a regular `Report` and a `FollowupReport`; A normal Report</span>\n<span class=\"sd\">    should have all fields required, whereas a FollowupReport only has the `report` field as</span>\n<span class=\"sd\">    a required field.</span>\n\n<span class=\"sd\">    Important note!</span>\n<span class=\"sd\">    Due to the construction of the two different types within a single model, it is important</span>\n<span class=\"sd\">    to explicitly implement the perticular differences in for example the form used.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">)</span>\n    <span class=\"n\">report_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">REPORT_NORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"s1\">&#39;This number is a unique number &#39;</span>\n                                                           <span class=\"s1\">&#39;refeering to the Report nr. of &#39;</span>\n                                                           <span class=\"s1\">&#39;the Submission&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;report_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `invited&#39; filled from RefereeInvitation objects at moment of report submission</span>\n    <span class=\"n\">invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `flagged&#39; if author of report has been flagged by submission authors (surname check only)</span>\n    <span class=\"n\">flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">qualification</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Qualification to referee this: I am&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Text-based reporting</span>\n    <span class=\"n\">strengths</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">weaknesses</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Qualities:</span>\n    <span class=\"n\">validity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">significance</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                    <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">originality</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">clarity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                               <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">formatting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                          <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of paper formatting&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">grammar</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of English grammar&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pdf_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REPORTS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ReportQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;report_nr&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reports&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_in_draft</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_vetted</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Control Report count per Submission.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Report.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#report_&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_followup_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the</span>\n<span class=\"sd\">        author of the report already has a vetted report in the series of the specific Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">submission__arxiv_vn_nr__lt</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">())</span>\n\n<div class=\"viewcode-block\" id=\"Report.latest_report_from_series\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report.latest_report_from_series\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">latest_report_from_series</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get latest Report from the same author for the Submission series.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n                <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission__arxiv_identifier_wo_vn_nr&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span></div>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">associated_published_doi</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return the doi of the published object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;type&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;referee-report&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Report on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;reviewer&#39;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Report on arXiv:</span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n\n\n<span class=\"c1\">##########################</span>\n<span class=\"c1\"># EditorialCommunication #</span>\n<span class=\"c1\">##########################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCommunication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialCommunication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCommunication</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each individual communication between Editor-in-charge</span>\n<span class=\"sd\">    to and from Referees and Authors becomes an instance of this class.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationQueryset</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;timestamp&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_communications&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comtype</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39; for submission &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span>\n                   <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">output</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EICRecommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EICRecommendation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EICRecommendation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The EICRecommendation is the recommendation of a Submission written by</span>\n<span class=\"sd\">    the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by</span>\n<span class=\"sd\">    a subset of Fellows and should contain the actual publication decision.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eicrecommendations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editorial_college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the&#39;</span>\n                                                                  <span class=\"s1\">&#39; Editorial College&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">version</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Editorial Fellows who have assessed this recommendation:</span>\n    <span class=\"n\">eligible_to_vote</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                              <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eligible_to_vote&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_for</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_for&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_against</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_against&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_abstain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_abstain&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;version&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;version&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">{title}</span><span class=\"s1\"> by </span><span class=\"si\">{author}</span><span class=\"s1\">, </span><span class=\"si\">{recommendation}</span><span class=\"s1\"> version </span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">20</span><span class=\"p\">],</span>\n            <span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">(),</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">version</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># TODO: Fix this weird redirect, but it&#39;s neccesary for the notifications to have one.</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_for</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_against</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_abstained</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">may_be_reformulated</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Already reformulated before; please use the latest version</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"iThenticateReport\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">iThenticateReport</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    iThenticateReport is the SciPost register of an iThenticate report. It saves</span>\n<span class=\"sd\">    basic information coming from iThenticate into the SciPost database for easy access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">uploaded_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doc_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">part_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">percent_match</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Report&#39;</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Reports&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:plagiarism&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span>\n                            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"iThenticateReport.get_report_url\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport.get_report_url\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_report_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Request new read-only url from iThenticate and return.</span>\n\n<span class=\"sd\">        Note: The read-only link is valid for only 15 minutes, saving may be worthless</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n        <span class=\"kn\">from</span> <span class=\"nn\">.plagiarism</span> <span class=\"k\">import</span> <span class=\"n\">iThenticate</span>\n        <span class=\"n\">plagiarism</span> <span class=\"o\">=</span> <span class=\"n\">iThenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">plagiarism</span><span class=\"o\">.</span><span class=\"n\">get_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Report </span><span class=\"si\">{doc_id}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">doc_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doc_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; on Submission </span><span class=\"si\">{arxiv}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                        <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;commit&#39;</span><span class=\"p\">,</span> <span class=\"kc\">True</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">score</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">percent_match</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/submissions/models", "title": "submissions.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/submissions/views.fjson b/docs/codebase/_build/json/_modules/submissions/views.fjson
index 9cedd72c9a30c26b386d0266339632e166173c3e..8e6de121398fe3f1dd6aed9ee8786d1413edb611 100644
--- a/docs/codebase/_build/json/_modules/submissions/views.fjson
+++ b/docs/codebase/_build/json/_modules/submissions/views.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/submissions/views", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for submissions.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">feedparser</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span><span class=\"p\">,</span> <span class=\"n\">IntegrityError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Template</span><span class=\"p\">,</span> <span class=\"n\">Context</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.base</span> <span class=\"k\">import</span> <span class=\"n\">RedirectView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.detail</span> <span class=\"k\">import</span> <span class=\"n\">DetailView</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignment</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.mixins</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionAdminViewMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">,</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionSearchForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">,</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EICRecommendationForm</span><span class=\"p\">,</span> <span class=\"n\">ReportForm</span><span class=\"p\">,</span> <span class=\"n\">VetReportForm</span><span class=\"p\">,</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">,</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">iThenticateReportForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionPoolFilterForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_required</span><span class=\"p\">,</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.views</span> <span class=\"k\">import</span> <span class=\"n\">MailEditingSubView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">,</span> <span class=\"n\">RemarkForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">Remark</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">INVITATION_REFEREEING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.utils</span> <span class=\"k\">import</span> <span class=\"n\">DirectMailUtil</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.forms</span> <span class=\"k\">import</span> <span class=\"n\">ProofsDecisionForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionStream</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># SUBMISSIONS:</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n                  <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestSubmission</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:prefill_using_identifier&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The manuscript has been submitted to </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">())</span>\n\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for your Submission to SciPost&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;Your Submission will soon be handled by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">},</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">)</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_resubmission_ack_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_reappointment_email</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_submission_ack_email</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">success_url</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_invalid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">error_messages</span> <span class=\"ow\">in</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">error_messages</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_invalid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                          <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">,</span> <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Submit message to user</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"n\">resubmessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;There already exists a preprint with this arXiv identifier &#39;</span>\n                            <span class=\"s1\">&#39;but a different version number. </span><span class=\"se\">\\n</span><span class=\"s1\">Your Submission will be &#39;</span>\n                            <span class=\"s1\">&#39;handled as a resubmission.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">resubmessage</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_prefill_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SubmissionListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionSearchForm</span>\n    <span class=\"n\">submission_search_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_newest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=-</span><span class=\"mi\">60</span><span class=\"p\">),</span>\n                <span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span> <span class=\"ow\">and</span> <span class=\"s1\">&#39;nrweeksback&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">nrweeksback</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">discipline</span><span class=\"o\">=</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">weeks</span><span class=\"o\">=-</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">nrweeksback</span><span class=\"p\">))</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail_wo_vn_nr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n                                   <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span>\n                               <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                               <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;proofs_decision_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ProofsDecisionForm</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">is_author</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">invited_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">contributed_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                      <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># User is referee for the Submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitations</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editorial_communications</span><span class=\"o\">.</span><span class=\"n\">for_referees</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invited_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">invited_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributed_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributed_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unfinished_report_for_user&#39;</span><span class=\"p\">:</span> <span class=\"n\">unfinished_report_for_user</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author_unchecked&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invitations&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitations</span><span class=\"p\">,</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"report_detail_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.report_detail_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">report_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Download the PDF of a Report if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span>\n                               <span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                               <span class=\"n\">pdf_report__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"o\">=</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">pdf_report</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">_report-</span><span class=\"si\">%i</span><span class=\"s1\">.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<div class=\"viewcode-block\" id=\"submission_refereeing_package_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submission_refereeing_package_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submission_refereeing_package_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view let&#39;s the user download all Report PDF&#39;s in a single merged PDF.</span>\n<span class=\"sd\">    The merging takes places every time its downloaded to make sure all available report PDF&#39;s</span>\n<span class=\"sd\">    are included and the EdColAdmin doesn&#39;t have to compile the package every time again.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">-refereeing-package.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"reports_accepted_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reports_accepted_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reports_accepted_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_report&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">report_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:reports_accepted_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_compile_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"treated_submissions_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.treated_submissions_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">treated_submissions_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_refereeing_pack&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-acceptance_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">treated_submission_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:treated_submissions_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_pdf_compile.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_workflow\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_workflow\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_workflow</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Summary page for Editorial Fellows, containing a digest</span>\n<span class=\"sd\">    of the actions to take to handle Submissions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/editorial_workflow.html&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"pool\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.pool\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Submissions pool contains all submissions which are undergoing</span>\n<span class=\"sd\">    the editorial process, from submission</span>\n<span class=\"sd\">    to publication acceptance or rejection.</span>\n<span class=\"sd\">    All members of the Editorial College have access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Search</span>\n    <span class=\"n\">search_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionPoolFilterForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Mainly as fallback for the old-pool while in test phase.</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span>\n    <span class=\"n\">recs_to_vote_on</span> <span class=\"o\">=</span> <span class=\"n\">recommendations</span><span class=\"o\">.</span><span class=\"n\">user_may_vote_on</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Forms</span>\n    <span class=\"n\">consider_assignment_form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">rec_vote_form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">()</span>\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_status&#39;</span><span class=\"p\">:</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;consider_assignment_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">consider_assignment_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recs_to_vote_on&#39;</span><span class=\"p\">:</span> <span class=\"n\">recs_to_vote_on</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;rec_vote_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">rec_vote_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;remark_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">remark_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"c1\"># Show specific submission in the pool</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n\n    <span class=\"c1\"># EdColAdmin related variables</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;latest_submission_events&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">for_eic</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">last_hours</span><span class=\"p\">()</span>\\\n            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Pool gets Submission details via ajax request</span>\n    <span class=\"k\">if</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;partials/submissions/pool/submission_details.html&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/pool.html&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"add_remark\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.add_remark\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_remark</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    With this method, an Editorial Fellow or Board Member</span>\n<span class=\"sd\">    is adding a remark on a Submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                        <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                        <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your remark has succesfully been posted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The form was invalidly filled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"assign_submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assign_submission\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assign_submission</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Assign Editor-in-charge to Submission.</span>\n<span class=\"sd\">    Action done by SciPost Administration or Editorial College Administration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">ed_assignment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">ed_assignment</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_assignment_request_email</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your assignment request has been sent successfully.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission_to_assign&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_request\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">assignment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Process EditorialAssignment acceptance/denial form or show if not submitted.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">assignment_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n\n    <span class=\"k\">elif</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                        <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Assignments can get stuck here,</span>\n        <span class=\"c1\"># if errormessage is given the contributor can&#39;t close the assignment!!</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n            <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvents</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;unassigned&#39;</span>\n\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for considering&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form submitted, redirect user</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignment_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"volunteer_as_EIC\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.volunteer_as_EIC\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">volunteer_as_EIC</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called when a Fellow volunteers while perusing the submissions pool.</span>\n<span class=\"sd\">    This is an adapted version of the assignment_request method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                         <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                         <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># The Contributor may already have an EditorialAssignment due to an earlier invitation.</span>\n    <span class=\"n\">assignment</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span>\n        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Set deadlines</span>\n    <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Update Submission data</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_failed\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_failed\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_failed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    No Editorial Fellow has accepted or volunteered to become Editor-in-charge.</span>\n<span class=\"sd\">    The submission is rejected.</span>\n<span class=\"sd\">    This method is called from pool.html by an Editorial Administrator.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;assignment_failed&#39;</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n                                  <span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">]})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_all_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">assignment_failed_email_authors</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Submission &#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span>\n                                      <span class=\"s1\">&#39; has failed pre-screening and been rejected. &#39;</span>\n                                      <span class=\"s1\">&#39;Authors have been informed by email.&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_failed.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"assignments\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignments\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page provides a Fellow with an explicit task list</span>\n<span class=\"sd\">    of editorial actions which should be undertaken.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignments</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">current_assignments</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                             <span class=\"n\">completed</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;current_assignments&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_assignments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_page\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The central page for the EIC to manage all its Editorial duties.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Administrators will be able to see all Submissions</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The current user is not EIC of the Submission!</span>\n            <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">voting_fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n                <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;set_deadline_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;cycle_choice_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;full_access&#39;</span><span class=\"p\">:</span> <span class=\"n\">full_access</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/editorial_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"cycle_form_submit\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cycle_form_submit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cycle_form_submit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If Submission is `resubmission_incoming` the EIC should first choose what refereeing</span>\n<span class=\"sd\">    cycle to choose.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_status</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_deadline</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">reinvite_referees</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;referees_reinvite&#39;</span><span class=\"p\">],</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your choice has been confirmed&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;The new cycle will be &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_refereeing_cycle_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect to EIC Recommendation page immediately</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:eic_recommendation&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span>\n        <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"select_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.select_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">select_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Select/Invite referees by first listing them here.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"n\">ref_search_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributors_found</span>\n\n        <span class=\"c1\"># Check for recent co-authorship (thus referee disqualification)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">submission</span>\n                                           <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                           <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n            <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n            <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                        <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                        <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n            <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n        <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;ref_recruit_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;ref_search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">ref_search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;queryresults&#39;</span><span class=\"p\">:</span> <span class=\"n\">queryresults</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"recruit_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.recruit_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recruit_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If the Editor-in-charge does not find the desired referee among Contributors</span>\n<span class=\"sd\">    (otherwise, the method send_refereeing_invitation below is used instead),</span>\n<span class=\"sd\">    he/she can invite somebody by providing name + contact details.</span>\n<span class=\"sd\">    This function emails a registration invitation to this person.</span>\n<span class=\"sd\">    The pending refereeing invitation is then recognized upon registration,</span>\n<span class=\"sd\">    using the invitation token.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">ref_recruit_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># TODO check if email already taken</span>\n            <span class=\"n\">ref_invitation</span> <span class=\"o\">=</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n            <span class=\"c1\"># Create and send a registration invitation</span>\n            <span class=\"n\">ref_inv_message_head</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;On behalf of the Editor-in-charge </span><span class=\"si\">{eic_title}</span><span class=\"s1\"> </span><span class=\"si\">{eic_last_name}</span><span class=\"s1\">, we would &#39;</span>\n                <span class=\"s1\">&#39;like to invite you to referee a Submission to </span><span class=\"si\">{journal}</span><span class=\"s1\">, namely&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"si\">{sub_title}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">by </span><span class=\"si\">{sub_author_list}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">(see https://scipost.org/</span><span class=\"si\">{sub_url}</span><span class=\"s1\">).&#39;</span>\n                <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                    <span class=\"n\">eic_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">eic_last_name</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                    <span class=\"n\">journal</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">sub_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_author_list</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_url</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n            <span class=\"n\">reg_invitation</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationInvitation</span><span class=\"p\">(</span>\n                <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">invitation_type</span><span class=\"o\">=</span><span class=\"n\">INVITATION_REFEREEING</span><span class=\"p\">,</span>\n                <span class=\"n\">created_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">personal_message</span><span class=\"o\">=</span><span class=\"n\">ref_inv_message_head</span><span class=\"p\">)</span>\n\n            <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Copy the key to the refereeing invitation</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">mail_sender</span> <span class=\"o\">=</span> <span class=\"n\">DirectMailUtil</span><span class=\"p\">(</span><span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitation&#39;</span><span class=\"p\">,</span>\n                                         <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">reg_invitation</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">set_alternative_sender</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost Refereeing&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;refereeing@scipost.org&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Referee </span><span class=\"si\">{}</span><span class=\"s1\"> invited&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">))</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has been recruited and invited as a referee.&#39;</span>\n                                         <span class=\"o\">%</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"send_refereeing_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.send_refereeing_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_refereeing_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is called by the EIC from the submission&#39;s editorial_page,</span>\n<span class=\"sd\">    in the case where the referee is an identified Contributor.</span>\n<span class=\"sd\">    For a referee who isn&#39;t a Contributor yet, the method recruit_referee above</span>\n<span class=\"sd\">    is called instead.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_currently_available</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This Contributor is marked as currently unavailable. &#39;</span>\n                        <span class=\"s1\">&#39;Please go back and select another referee.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                                   <span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                                   <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                                   <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">email_address</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n                                   <span class=\"c1\"># the key is only used for inviting unregistered users</span>\n                                   <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"s1\">&#39;notused&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">date_invited</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail_request</span> <span class=\"o\">=</span> <span class=\"n\">MailEditingSubView</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions_referee_invite&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">invitation</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"c1\"># SubmissionUtils.load({&#39;invitation&#39;: invitation})</span>\n        <span class=\"c1\"># SubmissionUtils.send_refereeing_invitation_email()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has been invited.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invitation sent&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">return_render</span><span class=\"p\">()</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"ref_invitation_reminder\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.ref_invitation_reminder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">ref_invitation_reminder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    when a referee has been invited but hasn&#39;t answered yet.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_unreg_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Reminder sent succesfully.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"accept_or_decline_ref_invitations\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.accept_or_decline_ref_invitations\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accept_or_decline_ref_invitations</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    RefereeInvitations need to be either accepted or declined by the invited user</span>\n<span class=\"sd\">    using this view. The decision will be taken one invitation at a time.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation_id</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;There are no more Refereeing Invitations for you to consider.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for agreeing to referee this Submission&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;&lt;p&gt;When you are ready, please go to the &#39;</span>\n                                       <span class=\"s1\">&#39;&lt;a href=&quot;</span><span class=\"si\">{url}</span><span class=\"s1\">&quot;&gt;Submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s page&lt;/a&gt; to&#39;</span>\n                                       <span class=\"s1\">&#39; submit your Report.&lt;/p&gt;&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                                            <span class=\"n\">url</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;declined&#39;</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;You have declined to contribute a Report&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;Nonetheless, we thank you very much for considering&#39;</span>\n                                       <span class=\"s1\">&#39; this refereeing invitation.&lt;/p&gt;&#39;</span><span class=\"p\">))</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_in_response_to_decision</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                   <span class=\"o\">%</span> <span class=\"n\">decision_string</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">decision_string</span><span class=\"p\">))</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">decline_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"p\">):</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span>\n                                   <span class=\"n\">accepted__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># User filled in: Accept</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Please login and go to your personal page if you&#39;</span>\n                                      <span class=\"s1\">&#39; want to accept the invitation.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has declined the&#39;</span>\n                                                   <span class=\"s1\">&#39; refereeing invitation.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has declined the refereeing &#39;</span>\n                                                <span class=\"s1\">&#39;invitation.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for informing us that you will not provide a Report.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"cancel_ref_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cancel_ref_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cancel_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    to remove a referee for the list of invited ones.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_cancellation_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee invitation has been cancelled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee invitation for </span><span class=\"si\">%s</span><span class=\"s1\"> has been cancelled.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"extend_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.extend_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">extend_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">days</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Extend Refereeing deadline for Submission and open reporting and commenting.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"p\">))</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"set_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.set_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Set Refereeing deadline for Submission and open reporting and commenting if</span>\n<span class=\"sd\">    the new date is in the future.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;New reporting deadline set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The deadline has not been set. Please try again.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"close_refereeing_round\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.close_refereeing_round\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">close_refereeing_round</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by the Editor-in-charge when a satisfactory number of</span>\n<span class=\"sd\">    reports have been gathered.</span>\n<span class=\"sd\">    Automatically emails the authors to ask them if they want to</span>\n<span class=\"sd\">    round off any replies to reports or comments before the</span>\n<span class=\"sd\">    editorial recommendation is formulated.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;EICassigned&#39;</span><span class=\"p\">:</span>  <span class=\"c1\"># only close if currently undergoing refereeing</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;review_closed&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;Refereeing round has been closed.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">refereeing_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions_under_refereeing</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                    <span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submissions_under_refereeing&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions_under_refereeing</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/refereeing_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"communication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.communication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">communication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">comtype</span><span class=\"p\">,</span> <span class=\"n\">referee_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Communication between editor-in-charge, author or referee</span>\n<span class=\"sd\">    occurring during the submission refereeing.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Editor to {Author, Referee, Editorial Administration}</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Author to Editor</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;RtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Referee to Editor (Contributor account required)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Raise PermissionDenied to let the user know something is wrong with its account.</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee_invitations__referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Editorial Administration to Editor</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Invalid commtype in the url!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"c1\"># Get the showpiece itself or return 404</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submissions_qs</span><span class=\"p\">,</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">referee_id</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">referee</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Get the Contributor to communicate with if not already defined (`Eto?` communication)</span>\n        <span class=\"c1\"># To Fix: Assuming the Editorial Administrator won&#39;t make any `referee_id` mistakes</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">referee_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">communication</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">comtype</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">referee</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">:</span> <span class=\"n\">communication</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_communication_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comtype&#39;</span><span class=\"p\">:</span> <span class=\"n\">comtype</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;referee_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">referee_id</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/communication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Write EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eic_recommendation_required</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;An Editorial Recommendation is not required&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;This submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s current status is: &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_status_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Find EditorialAssignment for user</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_assignment</span><span class=\"p\">():</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You cannot formulate an Editorial Recommendation,&#39;</span>\n                                   <span class=\"s1\">&#39; because the Editorial Assignment has not been set properly.&#39;</span>\n                                   <span class=\"s1\">&#39; Please &#39;</span>\n                                   <span class=\"s1\">&#39;&lt;a href=&quot;mailto:admin@scipost.org&quot;&gt;report the problem&lt;/a&gt;.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully submitted&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"reformulate_eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reformulate_eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reformulate_eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reformulate EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;With the current status of the Submission you are not &#39;</span>\n                                   <span class=\"s1\">&#39;allowed to reformulate the Editorial Recommendation&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"n\">reformulate</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully reformulated&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate_rewrite.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports</span>\n<span class=\"c1\">###########</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"submit_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submit_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submit_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A form to submit a report on a submission will be shown and processed here.</span>\n\n<span class=\"sd\">    Important checks to be aware of include an author check for the submission,</span>\n<span class=\"sd\">    has the reporting deadline not been reached yet and does there exist any invitation</span>\n<span class=\"sd\">    for the current user on this submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Check whether the user can submit a report:</span>\n    <span class=\"n\">current_contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span>\n                           <span class=\"p\">(</span><span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span> <span class=\"ow\">and</span>\n                           <span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">))</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The reporting deadline has passed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Reporting for this submission has closed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Remove old drafts from the database</span>\n            <span class=\"n\">reports_in_draft_to_remove</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">reports_in_draft_to_remove</span><span class=\"p\">:</span>\n                <span class=\"n\">reports_in_draft_to_remove</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;You are an author of this Submission and cannot submit a Report.&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The system flagged you as a potential author of this Submission. &#39;</span>\n                        <span class=\"s1\">&#39;Please go to your personal page under the Submissions tab&#39;</span>\n                        <span class=\"s1\">&#39; to clarify this.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Find and fill earlier version of report</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report_in_draft</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Check if data sent is valid</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newreport</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">newreport</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your Report has been saved. &#39;</span>\n                                       <span class=\"s1\">&#39;You may carry on working on it,&#39;</span>\n                                       <span class=\"s1\">&#39; or leave the page and finish it later.&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Send mails if report is submitted</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">newreport</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_EIC_report_delivered</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_report_delivered</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents for the EIC only, as it can also be rejected still</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has submitted a new Report.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your Report&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_reports_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_reports_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_reports_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reports with status `unvetted` will be shown (oldest first).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n    <span class=\"n\">reports_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;reports_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_reports_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Report with status `unvetted` will be shown. A user may only vet reports of submissions</span>\n<span class=\"sd\">    he/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</span>\n\n<span class=\"sd\">    After vetting an email is sent to the report author, bcc EIC. If report</span>\n<span class=\"sd\">    has not been refused, the submission author is also mailed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_vetting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># email report author</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n                              <span class=\"s1\">&#39;email_response&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">acknowledge_report_email</span><span class=\"p\">()</span>  <span class=\"c1\"># email report author, bcc EIC</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for the EIC</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Report by </span><span class=\"si\">%s</span><span class=\"s1\"> is vetted.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">:</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_report_received_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvent to tell the author about the new report</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Report has been submitted.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Submitted Report vetted for &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/a&gt;.&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">(),</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:vet_submitted_reports_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">prepare_for_voting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">fellows_with_expertise</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">contributor__expertises__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">])</span>\n\n    <span class=\"n\">coauthorships</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n    <span class=\"n\">eligibility_form</span> <span class=\"o\">=</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;We have registered your selection.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial Recommendation has been &#39;</span>\n                                                    <span class=\"s1\">&#39;put forward to the College for voting.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Identify possible co-authorships in last 3 years, disqualifying Fellow from voting:</span>\n        <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">fellow</span> <span class=\"ow\">in</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n                                               <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                               <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n                <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n                    <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n                    <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                                <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                                <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n                    <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n                    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n                    <span class=\"k\">if</span> <span class=\"n\">queryresults</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"p\">:</span>\n                        <span class=\"n\">coauthorships</span><span class=\"p\">[</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">queryresults</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;fellows_with_expertise&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;coauthorships&#39;</span><span class=\"p\">:</span> <span class=\"n\">coauthorships</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;eligibility_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">eligibility_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/recommendation_prepare_for_voting.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vote_on_rec</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;agree&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;disagree&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;abstain&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">,</span>\n                            <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                            <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your vote.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"remind_Fellows_to_vote\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.remind_Fellows_to_vote\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">remind_Fellows_to_vote</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to all Fellow with pending voting duties.</span>\n<span class=\"sd\">    It must be called by and Editorial Administrator.</span>\n\n<span class=\"sd\">    TODO: This reminder function doesn&#39;t filter per submission?!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">put_to_voting</span><span class=\"p\">()</span>\n\n    <span class=\"n\">Fellow_emails</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">Fellow_names</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">rec</span> <span class=\"ow\">in</span> <span class=\"n\">recommendations</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">Fellow</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">eligible_to_vote</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">):</span>\n                <span class=\"n\">Fellow_emails</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">)</span>\n                <span class=\"n\">Fellow_names</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"p\">))</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;Fellow_emails&#39;</span><span class=\"p\">:</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_Fellows_voting_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Email reminders have been sent to: &lt;ul&gt;&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">Fellow_names</span><span class=\"p\">):</span>\n        <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;li&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/li&gt;&#39;</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/ul&gt;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">ack_message</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">({})),</span>\n               <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n               <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"fix_College_decision\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.fix_College_decision\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">fix_College_decision</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Terminates the voting on a Recommendation.</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n\n<span class=\"sd\">    # TODO - 2 bugs:</span>\n\n<span class=\"sd\">    TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.</span>\n<span class=\"sd\">    TO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Publish as Tier I, II or III</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Create a ProductionStream object</span>\n        <span class=\"n\">prodstream</span> <span class=\"o\">=</span> <span class=\"n\">ProductionStream</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n        <span class=\"n\">prodstream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">ed_admins</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_perform_supervisory_actions&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_work_for_stream&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n    <span class=\"k\">elif</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Reject + update-reject other versions of submission</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;rejected&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">sub</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">other_versions_pool</span><span class=\"p\">:</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;resubmitted_rejected&#39;</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"c1\"># Add SubmissionEvent for EIC</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                 <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_College_decision_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">EICRecommendationView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">DetailView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Get the EICRecommendation as a submission-related instance. &quot;&quot;&quot;</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n            <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;rec_id&#39;</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/admin/plagiarism_report.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">iThenticateReportForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismReportPDFView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">RedirectView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_redirect_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"o\">.</span><span class=\"n\">get_report_url</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">url</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"k\">return</span> <span class=\"n\">url</span>\n</pre></div>", "sidebars": null, "title": "submissions.views"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for submissions.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">feedparser</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span><span class=\"p\">,</span> <span class=\"n\">IntegrityError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Template</span><span class=\"p\">,</span> <span class=\"n\">Context</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.base</span> <span class=\"k\">import</span> <span class=\"n\">RedirectView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.detail</span> <span class=\"k\">import</span> <span class=\"n\">DetailView</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignment</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.mixins</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionAdminViewMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">,</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionSearchForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">,</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EICRecommendationForm</span><span class=\"p\">,</span> <span class=\"n\">ReportForm</span><span class=\"p\">,</span> <span class=\"n\">VetReportForm</span><span class=\"p\">,</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">,</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">iThenticateReportForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionPoolFilterForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_required</span><span class=\"p\">,</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.views</span> <span class=\"k\">import</span> <span class=\"n\">MailEditingSubView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">,</span> <span class=\"n\">RemarkForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">Remark</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">INVITATION_REFEREEING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.utils</span> <span class=\"k\">import</span> <span class=\"n\">DirectMailUtil</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.forms</span> <span class=\"k\">import</span> <span class=\"n\">ProofsDecisionForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionStream</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># SUBMISSIONS:</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n                  <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestSubmission</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:prefill_using_identifier&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The manuscript has been submitted to </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">())</span>\n\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for your Submission to SciPost&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;Your Submission will soon be handled by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">},</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">)</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_resubmission_ack_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_reappointment_email</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_submission_ack_email</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">success_url</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_invalid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">error_messages</span> <span class=\"ow\">in</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">error_messages</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_invalid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                          <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">,</span> <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Submit message to user</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"n\">resubmessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;There already exists a preprint with this arXiv identifier &#39;</span>\n                            <span class=\"s1\">&#39;but a different version number. </span><span class=\"se\">\\n</span><span class=\"s1\">Your Submission will be &#39;</span>\n                            <span class=\"s1\">&#39;handled as a resubmission.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">resubmessage</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_prefill_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SubmissionListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionSearchForm</span>\n    <span class=\"n\">submission_search_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_newest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=-</span><span class=\"mi\">60</span><span class=\"p\">),</span>\n                <span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span> <span class=\"ow\">and</span> <span class=\"s1\">&#39;nrweeksback&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">nrweeksback</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">discipline</span><span class=\"o\">=</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">weeks</span><span class=\"o\">=-</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">nrweeksback</span><span class=\"p\">))</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail_wo_vn_nr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n                                   <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span>\n                               <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                               <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;proofs_decision_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ProofsDecisionForm</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">is_author</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">invited_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">contributed_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                      <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># User is referee for the Submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitations</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editorial_communications</span><span class=\"o\">.</span><span class=\"n\">for_referees</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invited_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">invited_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributed_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributed_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unfinished_report_for_user&#39;</span><span class=\"p\">:</span> <span class=\"n\">unfinished_report_for_user</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author_unchecked&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invitations&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitations</span><span class=\"p\">,</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"report_detail_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.report_detail_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">report_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Download the PDF of a Report if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span>\n                               <span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                               <span class=\"n\">pdf_report__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"o\">=</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">pdf_report</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">_report-</span><span class=\"si\">%i</span><span class=\"s1\">.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<div class=\"viewcode-block\" id=\"submission_refereeing_package_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submission_refereeing_package_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submission_refereeing_package_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view let&#39;s the user download all Report PDF&#39;s in a single merged PDF.</span>\n<span class=\"sd\">    The merging takes places every time its downloaded to make sure all available report PDF&#39;s</span>\n<span class=\"sd\">    are included and the EdColAdmin doesn&#39;t have to compile the package every time again.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">-refereeing-package.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"reports_accepted_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reports_accepted_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reports_accepted_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_report&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">report_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:reports_accepted_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_compile_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"treated_submissions_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.treated_submissions_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">treated_submissions_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_refereeing_pack&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-acceptance_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">treated_submission_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:treated_submissions_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_pdf_compile.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_workflow\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_workflow\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_workflow</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Summary page for Editorial Fellows, containing a digest</span>\n<span class=\"sd\">    of the actions to take to handle Submissions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/editorial_workflow.html&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"pool\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.pool\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Submissions pool contains all submissions which are undergoing</span>\n<span class=\"sd\">    the editorial process, from submission</span>\n<span class=\"sd\">    to publication acceptance or rejection.</span>\n<span class=\"sd\">    All members of the Editorial College have access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Search</span>\n    <span class=\"n\">search_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionPoolFilterForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Mainly as fallback for the old-pool while in test phase.</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span>\n    <span class=\"n\">recs_to_vote_on</span> <span class=\"o\">=</span> <span class=\"n\">recommendations</span><span class=\"o\">.</span><span class=\"n\">user_may_vote_on</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Forms</span>\n    <span class=\"n\">consider_assignment_form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">rec_vote_form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">()</span>\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_status&#39;</span><span class=\"p\">:</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;consider_assignment_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">consider_assignment_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recs_to_vote_on&#39;</span><span class=\"p\">:</span> <span class=\"n\">recs_to_vote_on</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;rec_vote_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">rec_vote_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;remark_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">remark_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"c1\"># Show specific submission in the pool</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n\n    <span class=\"c1\"># EdColAdmin related variables</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;latest_submission_events&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">for_eic</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">last_hours</span><span class=\"p\">()</span>\\\n            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Pool gets Submission details via ajax request</span>\n    <span class=\"k\">if</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;partials/submissions/pool/submission_details.html&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/pool.html&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"add_remark\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.add_remark\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_remark</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    With this method, an Editorial Fellow or Board Member</span>\n<span class=\"sd\">    is adding a remark on a Submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                        <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                        <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your remark has succesfully been posted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The form was invalidly filled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"assign_submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assign_submission\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assign_submission</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Assign Editor-in-charge to Submission.</span>\n<span class=\"sd\">    Action done by SciPost Administration or Editorial College Administration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">ed_assignment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">ed_assignment</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_assignment_request_email</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your assignment request has been sent successfully.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission_to_assign&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_request\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">assignment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Process EditorialAssignment acceptance/denial form or show if not submitted.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">assignment_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n\n    <span class=\"k\">elif</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                        <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Assignments can get stuck here,</span>\n        <span class=\"c1\"># if errormessage is given the contributor can&#39;t close the assignment!!</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n            <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvents</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;unassigned&#39;</span>\n\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for considering&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form submitted, redirect user</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignment_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"volunteer_as_EIC\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.volunteer_as_EIC\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">volunteer_as_EIC</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called when a Fellow volunteers while perusing the submissions pool.</span>\n<span class=\"sd\">    This is an adapted version of the assignment_request method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                         <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                         <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># The Contributor may already have an EditorialAssignment due to an earlier invitation.</span>\n    <span class=\"n\">assignment</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span>\n        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Set deadlines</span>\n    <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Update Submission data</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_failed\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_failed\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_failed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    No Editorial Fellow has accepted or volunteered to become Editor-in-charge.</span>\n<span class=\"sd\">    The submission is rejected.</span>\n<span class=\"sd\">    This method is called from pool.html by an Editorial Administrator.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;assignment_failed&#39;</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n                                  <span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">]})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_all_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">assignment_failed_email_authors</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Submission &#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span>\n                                      <span class=\"s1\">&#39; has failed pre-screening and been rejected. &#39;</span>\n                                      <span class=\"s1\">&#39;Authors have been informed by email.&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_failed.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"assignments\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignments\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page provides a Fellow with an explicit task list</span>\n<span class=\"sd\">    of editorial actions which should be undertaken.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignments</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">current_assignments</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                             <span class=\"n\">completed</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;current_assignments&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_assignments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_page\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The central page for the EIC to manage all its Editorial duties.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Administrators will be able to see all Submissions</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The current user is not EIC of the Submission!</span>\n            <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">voting_fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n                <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;set_deadline_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;cycle_choice_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;full_access&#39;</span><span class=\"p\">:</span> <span class=\"n\">full_access</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/editorial_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"cycle_form_submit\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cycle_form_submit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cycle_form_submit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If Submission is `resubmission_incoming` the EIC should first choose what refereeing</span>\n<span class=\"sd\">    cycle to choose.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_status</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_deadline</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">reinvite_referees</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;referees_reinvite&#39;</span><span class=\"p\">],</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your choice has been confirmed&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;The new cycle will be &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_refereeing_cycle_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect to EIC Recommendation page immediately</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:eic_recommendation&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span>\n        <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"select_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.select_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">select_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Select/Invite referees by first listing them here.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"n\">ref_search_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributors_found</span>\n\n        <span class=\"c1\"># Check for recent co-authorship (thus referee disqualification)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">submission</span>\n                                           <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                           <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n            <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n            <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                        <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                        <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n            <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n        <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;ref_recruit_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;ref_search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">ref_search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;queryresults&#39;</span><span class=\"p\">:</span> <span class=\"n\">queryresults</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"recruit_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.recruit_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recruit_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If the Editor-in-charge does not find the desired referee among Contributors</span>\n<span class=\"sd\">    (otherwise, the method send_refereeing_invitation below is used instead),</span>\n<span class=\"sd\">    he/she can invite somebody by providing name + contact details.</span>\n<span class=\"sd\">    This function emails a registration invitation to this person.</span>\n<span class=\"sd\">    The pending refereeing invitation is then recognized upon registration,</span>\n<span class=\"sd\">    using the invitation token.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">ref_recruit_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># TODO check if email already taken</span>\n            <span class=\"n\">ref_invitation</span> <span class=\"o\">=</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n            <span class=\"c1\"># Create and send a registration invitation</span>\n            <span class=\"n\">ref_inv_message_head</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;On behalf of the Editor-in-charge </span><span class=\"si\">{eic_title}</span><span class=\"s1\"> </span><span class=\"si\">{eic_last_name}</span><span class=\"s1\">, we would &#39;</span>\n                <span class=\"s1\">&#39;like to invite you to referee a Submission to </span><span class=\"si\">{journal}</span><span class=\"s1\">, namely&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"si\">{sub_title}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">by </span><span class=\"si\">{sub_author_list}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">(see https://scipost.org/</span><span class=\"si\">{sub_url}</span><span class=\"s1\">).&#39;</span>\n                <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                    <span class=\"n\">eic_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">eic_last_name</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                    <span class=\"n\">journal</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">sub_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_author_list</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_url</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n            <span class=\"n\">reg_invitation</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationInvitation</span><span class=\"p\">(</span>\n                <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">invitation_type</span><span class=\"o\">=</span><span class=\"n\">INVITATION_REFEREEING</span><span class=\"p\">,</span>\n                <span class=\"n\">created_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">personal_message</span><span class=\"o\">=</span><span class=\"n\">ref_inv_message_head</span><span class=\"p\">)</span>\n\n            <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Copy the key to the refereeing invitation</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">mail_sender</span> <span class=\"o\">=</span> <span class=\"n\">DirectMailUtil</span><span class=\"p\">(</span><span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitation&#39;</span><span class=\"p\">,</span>\n                                         <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">reg_invitation</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">set_alternative_sender</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost Refereeing&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;refereeing@scipost.org&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Referee </span><span class=\"si\">{}</span><span class=\"s1\"> invited&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">))</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has been recruited and invited as a referee.&#39;</span>\n                                         <span class=\"o\">%</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"send_refereeing_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.send_refereeing_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_refereeing_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is called by the EIC from the submission&#39;s editorial_page,</span>\n<span class=\"sd\">    in the case where the referee is an identified Contributor.</span>\n<span class=\"sd\">    For a referee who isn&#39;t a Contributor yet, the method recruit_referee above</span>\n<span class=\"sd\">    is called instead.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_currently_available</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This Contributor is marked as currently unavailable. &#39;</span>\n                        <span class=\"s1\">&#39;Please go back and select another referee.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                                   <span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                                   <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                                   <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">email_address</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n                                   <span class=\"c1\"># the key is only used for inviting unregistered users</span>\n                                   <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"s1\">&#39;notused&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">date_invited</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail_request</span> <span class=\"o\">=</span> <span class=\"n\">MailEditingSubView</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions_referee_invite&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">invitation</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"c1\"># SubmissionUtils.load({&#39;invitation&#39;: invitation})</span>\n        <span class=\"c1\"># SubmissionUtils.send_refereeing_invitation_email()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has been invited.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invitation sent&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">return_render</span><span class=\"p\">()</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"ref_invitation_reminder\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.ref_invitation_reminder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">ref_invitation_reminder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    when a referee has been invited but hasn&#39;t answered yet.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_unreg_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Reminder sent succesfully.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"accept_or_decline_ref_invitations\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.accept_or_decline_ref_invitations\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accept_or_decline_ref_invitations</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    RefereeInvitations need to be either accepted or declined by the invited user</span>\n<span class=\"sd\">    using this view. The decision will be taken one invitation at a time.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation_id</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;There are no more Refereeing Invitations for you to consider.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for agreeing to referee this Submission&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;&lt;p&gt;When you are ready, please go to the &#39;</span>\n                                       <span class=\"s1\">&#39;&lt;a href=&quot;</span><span class=\"si\">{url}</span><span class=\"s1\">&quot;&gt;Submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s page&lt;/a&gt; to&#39;</span>\n                                       <span class=\"s1\">&#39; submit your Report.&lt;/p&gt;&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                                            <span class=\"n\">url</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;declined&#39;</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;You have declined to contribute a Report&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;Nonetheless, we thank you very much for considering&#39;</span>\n                                       <span class=\"s1\">&#39; this refereeing invitation.&lt;/p&gt;&#39;</span><span class=\"p\">))</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_in_response_to_decision</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                   <span class=\"o\">%</span> <span class=\"n\">decision_string</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">decision_string</span><span class=\"p\">))</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">decline_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"p\">):</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span>\n                                   <span class=\"n\">accepted__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># User filled in: Accept</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Please login and go to your personal page if you&#39;</span>\n                                      <span class=\"s1\">&#39; want to accept the invitation.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has declined the&#39;</span>\n                                                   <span class=\"s1\">&#39; refereeing invitation.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has declined the refereeing &#39;</span>\n                                                <span class=\"s1\">&#39;invitation.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for informing us that you will not provide a Report.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"cancel_ref_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cancel_ref_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cancel_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    to remove a referee for the list of invited ones.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_cancellation_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee invitation has been cancelled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee invitation for </span><span class=\"si\">%s</span><span class=\"s1\"> has been cancelled.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"extend_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.extend_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">extend_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">days</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Extend Refereeing deadline for Submission and open reporting and commenting.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"p\">))</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"set_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.set_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Set Refereeing deadline for Submission and open reporting and commenting if</span>\n<span class=\"sd\">    the new date is in the future.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;New reporting deadline set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The deadline has not been set. Please try again.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"close_refereeing_round\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.close_refereeing_round\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">close_refereeing_round</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by the Editor-in-charge when a satisfactory number of</span>\n<span class=\"sd\">    reports have been gathered.</span>\n<span class=\"sd\">    Automatically emails the authors to ask them if they want to</span>\n<span class=\"sd\">    round off any replies to reports or comments before the</span>\n<span class=\"sd\">    editorial recommendation is formulated.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;EICassigned&#39;</span><span class=\"p\">:</span>  <span class=\"c1\"># only close if currently undergoing refereeing</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;review_closed&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;Refereeing round has been closed.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">refereeing_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions_under_refereeing</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                    <span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submissions_under_refereeing&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions_under_refereeing</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/refereeing_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"communication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.communication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">communication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">comtype</span><span class=\"p\">,</span> <span class=\"n\">referee_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Communication between editor-in-charge, author or referee</span>\n<span class=\"sd\">    occurring during the submission refereeing.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Editor to {Author, Referee, Editorial Administration}</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Author to Editor</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;RtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Referee to Editor (Contributor account required)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Raise PermissionDenied to let the user know something is wrong with its account.</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee_invitations__referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Editorial Administration to Editor</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Invalid commtype in the url!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"c1\"># Get the showpiece itself or return 404</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submissions_qs</span><span class=\"p\">,</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">referee_id</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">referee</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Get the Contributor to communicate with if not already defined (`Eto?` communication)</span>\n        <span class=\"c1\"># To Fix: Assuming the Editorial Administrator won&#39;t make any `referee_id` mistakes</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">referee_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">communication</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">comtype</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">referee</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">:</span> <span class=\"n\">communication</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_communication_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comtype&#39;</span><span class=\"p\">:</span> <span class=\"n\">comtype</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;referee_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">referee_id</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/communication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Write EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eic_recommendation_required</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;An Editorial Recommendation is not required&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;This submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s current status is: &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_status_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Find EditorialAssignment for user</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_assignment</span><span class=\"p\">():</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You cannot formulate an Editorial Recommendation,&#39;</span>\n                                   <span class=\"s1\">&#39; because the Editorial Assignment has not been set properly.&#39;</span>\n                                   <span class=\"s1\">&#39; Please &#39;</span>\n                                   <span class=\"s1\">&#39;&lt;a href=&quot;mailto:admin@scipost.org&quot;&gt;report the problem&lt;/a&gt;.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully submitted&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"reformulate_eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reformulate_eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reformulate_eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reformulate EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;With the current status of the Submission you are not &#39;</span>\n                                   <span class=\"s1\">&#39;allowed to reformulate the Editorial Recommendation&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"n\">reformulate</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully reformulated&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate_rewrite.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports</span>\n<span class=\"c1\">###########</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"submit_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submit_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submit_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A form to submit a report on a submission will be shown and processed here.</span>\n\n<span class=\"sd\">    Important checks to be aware of include an author check for the submission,</span>\n<span class=\"sd\">    has the reporting deadline not been reached yet and does there exist any invitation</span>\n<span class=\"sd\">    for the current user on this submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Check whether the user can submit a report:</span>\n    <span class=\"n\">current_contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span>\n                           <span class=\"p\">(</span><span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span> <span class=\"ow\">and</span>\n                           <span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">))</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The reporting deadline has passed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Reporting for this submission has closed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Remove old drafts from the database</span>\n            <span class=\"n\">reports_in_draft_to_remove</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">reports_in_draft_to_remove</span><span class=\"p\">:</span>\n                <span class=\"n\">reports_in_draft_to_remove</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;You are an author of this Submission and cannot submit a Report.&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The system flagged you as a potential author of this Submission. &#39;</span>\n                        <span class=\"s1\">&#39;Please go to your personal page under the Submissions tab&#39;</span>\n                        <span class=\"s1\">&#39; to clarify this.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Find and fill earlier version of report</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report_in_draft</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Check if data sent is valid</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newreport</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">newreport</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your Report has been saved. &#39;</span>\n                                       <span class=\"s1\">&#39;You may carry on working on it,&#39;</span>\n                                       <span class=\"s1\">&#39; or leave the page and finish it later.&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Send mails if report is submitted</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">newreport</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_EIC_report_delivered</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_report_delivered</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents for the EIC only, as it can also be rejected still</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has submitted a new Report.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your Report&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_reports_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_reports_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_reports_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reports with status `unvetted` will be shown (oldest first).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n    <span class=\"n\">reports_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;reports_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_reports_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Report with status `unvetted` will be shown. A user may only vet reports of submissions</span>\n<span class=\"sd\">    he/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</span>\n\n<span class=\"sd\">    After vetting an email is sent to the report author, bcc EIC. If report</span>\n<span class=\"sd\">    has not been refused, the submission author is also mailed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_vetting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># email report author</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n                              <span class=\"s1\">&#39;email_response&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">acknowledge_report_email</span><span class=\"p\">()</span>  <span class=\"c1\"># email report author, bcc EIC</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for the EIC</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Report by </span><span class=\"si\">%s</span><span class=\"s1\"> is vetted.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">:</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_report_received_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvent to tell the author about the new report</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Report has been submitted.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Submitted Report vetted for &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/a&gt;.&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">(),</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:vet_submitted_reports_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">prepare_for_voting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">fellows_with_expertise</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">contributor__expertises__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">])</span>\n\n    <span class=\"n\">coauthorships</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n    <span class=\"n\">eligibility_form</span> <span class=\"o\">=</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;We have registered your selection.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial Recommendation has been &#39;</span>\n                                                    <span class=\"s1\">&#39;put forward to the College for voting.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Identify possible co-authorships in last 3 years, disqualifying Fellow from voting:</span>\n        <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">fellow</span> <span class=\"ow\">in</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n                                               <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                               <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n                <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n                    <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n                    <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                                <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                                <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n                    <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n                    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n                    <span class=\"k\">if</span> <span class=\"n\">queryresults</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"p\">:</span>\n                        <span class=\"n\">coauthorships</span><span class=\"p\">[</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">queryresults</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;fellows_with_expertise&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;coauthorships&#39;</span><span class=\"p\">:</span> <span class=\"n\">coauthorships</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;eligibility_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">eligibility_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/recommendation_prepare_for_voting.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vote_on_rec</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;agree&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;disagree&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;abstain&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">,</span>\n                            <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                            <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your vote.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"remind_Fellows_to_vote\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.remind_Fellows_to_vote\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">remind_Fellows_to_vote</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to all Fellow with pending voting duties.</span>\n<span class=\"sd\">    It must be called by and Editorial Administrator.</span>\n\n<span class=\"sd\">    TODO: This reminder function doesn&#39;t filter per submission?!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">put_to_voting</span><span class=\"p\">()</span>\n\n    <span class=\"n\">Fellow_emails</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">Fellow_names</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">rec</span> <span class=\"ow\">in</span> <span class=\"n\">recommendations</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">Fellow</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">eligible_to_vote</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">):</span>\n                <span class=\"n\">Fellow_emails</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">)</span>\n                <span class=\"n\">Fellow_names</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"p\">))</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;Fellow_emails&#39;</span><span class=\"p\">:</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_Fellows_voting_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Email reminders have been sent to: &lt;ul&gt;&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">Fellow_names</span><span class=\"p\">):</span>\n        <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;li&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/li&gt;&#39;</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/ul&gt;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">ack_message</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">({})),</span>\n               <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n               <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"fix_College_decision\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.fix_College_decision\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">fix_College_decision</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Terminates the voting on a Recommendation.</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n\n<span class=\"sd\">    # TODO - 2 bugs:</span>\n\n<span class=\"sd\">    TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.</span>\n<span class=\"sd\">    TO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Publish as Tier I, II or III</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Create a ProductionStream object</span>\n        <span class=\"n\">prodstream</span> <span class=\"o\">=</span> <span class=\"n\">ProductionStream</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n        <span class=\"n\">prodstream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">ed_admins</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_perform_supervisory_actions&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_work_for_stream&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n    <span class=\"k\">elif</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Reject + update-reject other versions of submission</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;rejected&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">sub</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">other_versions_pool</span><span class=\"p\">:</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;resubmitted_rejected&#39;</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"c1\"># Add SubmissionEvent for EIC</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                 <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_College_decision_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">EICRecommendationView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">DetailView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Get the EICRecommendation as a submission-related instance. &quot;&quot;&quot;</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n            <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;rec_id&#39;</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/admin/plagiarism_report.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">iThenticateReportForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismReportPDFView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">RedirectView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_redirect_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"o\">.</span><span class=\"n\">get_report_url</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">url</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"k\">return</span> <span class=\"n\">url</span>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/submissions/views", "title": "submissions.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/theses/models.fjson b/docs/codebase/_build/json/_modules/theses/models.fjson
index 7adcfe8fb6a2da85610857631850372cb113fa61..e9f16879c39cbe57f38767afd882b43d6b2fd736 100644
--- a/docs/codebase/_build/json/_modules/theses/models.fjson
+++ b/docs/codebase/_build/json/_modules/theses/models.fjson
@@ -1 +1 @@
-{"current_page_name": "_modules/theses/models", "customsidebar": null, "parents": [{"link": "../../", "title": "Module code"}], "alabaster_version": "0.7.10", "body": "<h1>Source code for theses.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">THESIS_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLinkManager</span>\n\n\n<div class=\"viewcode-block\" id=\"ThesisLink\"><a class=\"viewcode-back\" href=\"../../../apps/theses/#theses.models.ThesisLink\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ThesisLink</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; An URL pointing to a thesis &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_theses&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">THESIS_TYPES</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;URL (external repository)&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">author_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervisor(s)&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervised_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">institution</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;degree granting institution&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">defense_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of thesis defense&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract, outline or summary&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a ThesisLink</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLinkManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses:thesis&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">])</span></div>\n</pre></div>", "sidebars": null, "title": "theses.models"}
\ No newline at end of file
+{"customsidebar": null, "body": "<h1>Source code for theses.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">THESIS_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLinkManager</span>\n\n\n<div class=\"viewcode-block\" id=\"ThesisLink\"><a class=\"viewcode-back\" href=\"../../../apps/theses/#theses.models.ThesisLink\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ThesisLink</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; An URL pointing to a thesis &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_theses&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">THESIS_TYPES</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;URL (external repository)&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">author_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervisor(s)&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervised_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">institution</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;degree granting institution&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">defense_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of thesis defense&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract, outline or summary&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a ThesisLink</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLinkManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses:thesis&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">])</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/theses/models", "title": "theses.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_sources/maintenance/docs.txt b/docs/codebase/_build/json/_sources/maintenance/docs.txt
index 5c6bf8b65bdac421721a52cf7766d3b79df018df..3235a64ff568d3c4d8345cdfa85711d954828af2 100644
--- a/docs/codebase/_build/json/_sources/maintenance/docs.txt
+++ b/docs/codebase/_build/json/_sources/maintenance/docs.txt
@@ -2,6 +2,7 @@ Maintenance of SciPost documentation
 ====================================
 
 
+
 Sphinx-generated docs
 ---------------------
 
@@ -16,6 +17,17 @@ In the `docs` subfolders `codebase`, `admin` and `users`, invoke ``make html``.
 Sphinxdoc-generated docs (viewable online)
 ------------------------------------------
 
+
+Setting things up
+~~~~~~~~~~~~~~~~~
+
+The `django-sphinxdoc` app creates `Project` and `Document` classes. In the admin, one should create the following projects (slug in parentheses):
+
+   * SciPost Admin (admin)
+   * SciPost Codebase (codebase)
+   * SciPost Users (users)
+
+
 Updating the docs:
 ~~~~~~~~~~~~~~~~~~
 
diff --git a/docs/codebase/_build/json/apps.fjson b/docs/codebase/_build/json/apps.fjson
index 917d888b2ebe78d08edcaaa2767906946c8ac7af..9a537d1ff9ea65ff590337b71a1476b163db2aa9 100644
--- a/docs/codebase/_build/json/apps.fjson
+++ b/docs/codebase/_build/json/apps.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/scipost", "scipost", "N", "next"], ["maintenance/docs", "Maintenance of SciPost documentation", "P", "previous"]], "body": "<div class=\"section\" id=\"apps\">\n<h1>Apps<a class=\"headerlink\" href=\"#apps\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"scipost/\">scipost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions/\">submissions</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"journals/\">journals</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"comments/\">comments</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"commentaries/\">commentaries</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"theses/\">theses</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "apps.txt", "parents": [], "alabaster_version": "0.7.10", "meta": {}, "prev": {"link": "../maintenance/docs/", "title": "Maintenance of SciPost documentation"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Apps</a></li>\n</ul>\n", "next": {"link": "scipost/", "title": "scipost"}, "metatags": "", "display_toc": false, "current_page_name": "apps", "customsidebar": null, "sidebars": null, "title": "Apps"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"apps\">\n<h1>Apps<a class=\"headerlink\" href=\"#apps\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"scipost/\">scipost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions/\">submissions</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"journals/\">journals</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"comments/\">comments</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"commentaries/\">commentaries</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"theses/\">theses</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "current_page_name": "apps", "sourcename": "apps.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": {"link": "../maintenance/docs/", "title": "Maintenance of SciPost documentation"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/scipost", "scipost", "N", "next"], ["maintenance/docs", "Maintenance of SciPost documentation", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Apps</a></li>\n</ul>\n", "display_toc": false, "metatags": "", "sidebars": null, "title": "Apps", "next": {"link": "scipost/", "title": "scipost"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/commentaries.fjson b/docs/codebase/_build/json/apps/commentaries.fjson
index f89a6abfbe369e5cca211dca8ebfda54807c1d68..aacaa0260233c194d337344b4ccd302d1a7ff6a6 100644
--- a/docs/codebase/_build/json/apps/commentaries.fjson
+++ b/docs/codebase/_build/json/apps/commentaries.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/theses", "theses", "N", "next"], ["apps/comments", "comments", "P", "previous"]], "body": "<div class=\"section\" id=\"commentaries\">\n<h1>commentaries<a class=\"headerlink\" href=\"#commentaries\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-commentaries.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-commentaries.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"commentaries.models.Commentary\">\n<em class=\"property\">class </em><code class=\"descclassname\">commentaries.models.</code><code class=\"descname\">Commentary</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Commentary contains all the contents of a SciPost Commentary page for a given publication.</p>\n<dl class=\"method\">\n<dt id=\"commentaries.models.Commentary.parse_links_into_urls\">\n<code class=\"descname\">parse_links_into_urls</code><span class=\"sig-paren\">(</span><em>commit=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary.parse_links_into_urls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary.parse_links_into_urls\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Takes the arXiv nr or DOI and turns it into the urls</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-commentaries.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-commentaries.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"commentaries.views.comment_on_publication\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">comment_on_publication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#comment_on_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.comment_on_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This will let authors of an SciPost publication comment on their Publication by\nautomatically creating a Commentary page if not exist already.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.modify_commentary_request\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">modify_commentary_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#modify_commentary_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.modify_commentary_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Modify a commentary request after vetting with status &#8216;modified&#8217;.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.vet_commentary_requests\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">vet_commentary_requests</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#vet_commentary_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.vet_commentary_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Show the first commentary thats awaiting vetting</p>\n</dd></dl>\n\n</div>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "apps/commentaries.txt", "parents": [{"link": "../", "title": "Apps"}], "alabaster_version": "0.7.10", "meta": {}, "prev": {"link": "../comments/", "title": "comments"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">commentaries</a><ul>\n<li><a class=\"reference internal\" href=\"#module-commentaries.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "next": {"link": "../theses/", "title": "theses"}, "metatags": "", "display_toc": true, "current_page_name": "apps/commentaries", "customsidebar": null, "sidebars": null, "title": "commentaries"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"commentaries\">\n<h1>commentaries<a class=\"headerlink\" href=\"#commentaries\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-commentaries.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-commentaries.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"commentaries.models.Commentary\">\n<em class=\"property\">class </em><code class=\"descclassname\">commentaries.models.</code><code class=\"descname\">Commentary</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Commentary contains all the contents of a SciPost Commentary page for a given publication.</p>\n<dl class=\"method\">\n<dt id=\"commentaries.models.Commentary.parse_links_into_urls\">\n<code class=\"descname\">parse_links_into_urls</code><span class=\"sig-paren\">(</span><em>commit=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary.parse_links_into_urls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary.parse_links_into_urls\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Takes the arXiv nr or DOI and turns it into the urls</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-commentaries.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-commentaries.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"commentaries.views.comment_on_publication\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">comment_on_publication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#comment_on_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.comment_on_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This will let authors of an SciPost publication comment on their Publication by\nautomatically creating a Commentary page if not exist already.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.modify_commentary_request\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">modify_commentary_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#modify_commentary_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.modify_commentary_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Modify a commentary request after vetting with status &#8216;modified&#8217;.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.vet_commentary_requests\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">vet_commentary_requests</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#vet_commentary_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.vet_commentary_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Show the first commentary thats awaiting vetting</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/commentaries", "sourcename": "apps/commentaries.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../comments/", "title": "comments"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/theses", "theses", "N", "next"], ["apps/comments", "comments", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">commentaries</a><ul>\n<li><a class=\"reference internal\" href=\"#module-commentaries.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "commentaries", "next": {"link": "../theses/", "title": "theses"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/comments.fjson b/docs/codebase/_build/json/apps/comments.fjson
index 8d4e6cb2195595ee27a56231d3124e8d23239576..2e160fef725a6f180c3c2d6ca8a8366c20409126 100644
--- a/docs/codebase/_build/json/apps/comments.fjson
+++ b/docs/codebase/_build/json/apps/comments.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "N", "next"], ["apps/journals", "journals", "P", "previous"]], "body": "<div class=\"section\" id=\"comments\">\n<h1>comments<a class=\"headerlink\" href=\"#comments\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-comments.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-comments.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"comments.models.Comment\">\n<em class=\"property\">class </em><code class=\"descclassname\">comments.models.</code><code class=\"descname\">Comment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Comment is an unsollicited note, submitted by a Contributor,\non a particular publication or in reply to an earlier Comment.</p>\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author\">\n<code class=\"descname\">get_author</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author_str\">\n<code class=\"descname\">get_author_str</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author_str\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author_str\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author string, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#comments.models.Comment.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Comment relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#comments.models.Comment.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-comments.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-comments.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"comments.views.attachment\">\n<code class=\"descclassname\">comments.views.</code><code class=\"descname\">attachment</code><span class=\"sig-paren\">(</span><em>request</em>, <em>comment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/views/#attachment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.views.attachment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Open/read attachment of Comment if available.</p>\n</dd></dl>\n\n</div>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "apps/comments.txt", "parents": [{"link": "../", "title": "Apps"}], "alabaster_version": "0.7.10", "meta": {}, "prev": {"link": "../journals/", "title": "journals"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">comments</a><ul>\n<li><a class=\"reference internal\" href=\"#module-comments.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-comments.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "next": {"link": "../commentaries/", "title": "commentaries"}, "metatags": "", "display_toc": true, "current_page_name": "apps/comments", "customsidebar": null, "sidebars": null, "title": "comments"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"comments\">\n<h1>comments<a class=\"headerlink\" href=\"#comments\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-comments.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-comments.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"comments.models.Comment\">\n<em class=\"property\">class </em><code class=\"descclassname\">comments.models.</code><code class=\"descname\">Comment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Comment is an unsollicited note, submitted by a Contributor,\non a particular publication or in reply to an earlier Comment.</p>\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author\">\n<code class=\"descname\">get_author</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author_str\">\n<code class=\"descname\">get_author_str</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author_str\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author_str\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author string, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#comments.models.Comment.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Comment relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#comments.models.Comment.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-comments.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-comments.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"comments.views.attachment\">\n<code class=\"descclassname\">comments.views.</code><code class=\"descname\">attachment</code><span class=\"sig-paren\">(</span><em>request</em>, <em>comment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/views/#attachment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.views.attachment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Open/read attachment of Comment if available.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/comments", "sourcename": "apps/comments.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../journals/", "title": "journals"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "N", "next"], ["apps/journals", "journals", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">comments</a><ul>\n<li><a class=\"reference internal\" href=\"#module-comments.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-comments.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "comments", "next": {"link": "../commentaries/", "title": "commentaries"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/journals.fjson b/docs/codebase/_build/json/apps/journals.fjson
index ea2757eabacc88993620fe14e945f19716e6b7bd..ab3f36d1d04bd7f07ac3012c98f5606175872294 100644
--- a/docs/codebase/_build/json/apps/journals.fjson
+++ b/docs/codebase/_build/json/apps/journals.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/comments", "comments", "N", "next"], ["apps/submissions", "submissions", "P", "previous"]], "body": "<div class=\"section\" id=\"journals\">\n<h1>journals<a class=\"headerlink\" href=\"#journals\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-journals.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-journals.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"journals.models.DOAJDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">DOAJDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#DOAJDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.DOAJDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>For the Directory of Open Access Journals.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Deposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Deposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each time a Crossref deposit is made for a Publication,\na Deposit object instance is created containing the Publication&#8217;s\ncurrent version of the metadata_xml field.\nAll deposit history is thus contained here.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.GenericDOIDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">GenericDOIDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#GenericDOIDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.GenericDOIDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Instances of this class represent Crossref deposits for non-publication\nobjects such as Reports, Comments etc.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Issue\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Issue</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_volume</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>status</em>, <em>doi_label</em>, <em>path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Issue.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Journal\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Journal</code><span class=\"sig-paren\">(</span><em>id</em>, <em>name</em>, <em>doi_label</em>, <em>issn</em>, <em>active</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Journal.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Publication\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Publication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Publication is an object directly related to an accepted Submission. It contains metadata,\nthe actual publication file, author data, etc. etc.</p>\n<dl class=\"method\">\n<dt id=\"journals.models.Publication.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.PublicationAuthorsTable\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">PublicationAuthorsTable</code><span class=\"sig-paren\">(</span><em>id</em>, <em>publication</em>, <em>unregistered_author</em>, <em>contributor</em>, <em>order</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#PublicationAuthorsTable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.PublicationAuthorsTable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Reference\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Reference</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Reference\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Reference\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Refence is a reference used in a specific Publication.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.UnregisteredAuthor\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">UnregisteredAuthor</code><span class=\"sig-paren\">(</span><em>id</em>, <em>first_name</em>, <em>last_name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#UnregisteredAuthor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.UnregisteredAuthor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Volume\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Volume</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_journal</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Volume.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-journals.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-journals.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"journals.views.accepted\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">accepted</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#accepted\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.accepted\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for submissions to SciPost Physics which\nhave been accepted but are not yet published.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_associated_grant\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_associated_grant</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_associated_grant\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_associated_grant\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a grant from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_author\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_author</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>contributor_id=None</em>, <em>unregistered_author_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If not all authors are registered Contributors or if they have not\nall claimed authorship, this method allows editorial administrators\nto associated them to the publication.\nThis is important for the Crossref metadata, in which all authors must appear.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_generic_funder\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_generic_funder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_generic_funder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_generic_funder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a funder (generic, not via grant) from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_citation_list_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_citation_list_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_citation_list_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_citation_list_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the citation_list dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_funding_info_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_funding_info_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_funding_info_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_funding_info_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the funding_info dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_metadata_xml\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_metadata_xml</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_metadata_xml\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_metadata_xml\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>To be called by an EdAdmin after the citation_list,\nfunding_info entries have been filled.\nPopulates the metadata_xml field of a Publication instance.\nThe contents can then be sent to Crossref for registration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.email_object_made_citable\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">email_object_made_citable</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#email_object_made_citable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.email_object_made_citable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to the author of a Report or a Comment,\nto notify that the object has been made citable (doi registered).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.generic_metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">generic_metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#generic_metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.generic_metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method creates the metadata for non-Publication objects\nsuch as Reports and Comments, and deposits the metadata to\nCrossref.\nIf there exists a relation to a SciPost-published object,\nthe deposit uses Crossref&#8217;s peer review content type.\nOtherwise the deposit is done as a dataset.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.initiate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">initiate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#initiate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.initiate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nPublish the manuscript after proofs have been accepted.\nThis method prefills a ValidatePublicationForm for further\nprocessing (verification in validate_publication method).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.journals\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">journals</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#journals\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.journals\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main landing page for Journals application.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_comment_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_comment_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_comment_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_comment_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Comments.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_report_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_report_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_report_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_report_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Reports.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_DOAJ_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_DOAJ_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_DOAJ_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_DOAJ_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>DOAJ metadata deposit.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>option='test'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Crossref metadata deposit.\nIf test==True, test the metadata_xml using the Crossref test server.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.recent\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">recent</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#recent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.recent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for the most recent 20 publications in SciPost Physics.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.sign_existing_report\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">sign_existing_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#sign_existing_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.sign_existing_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Allows the author of a Report, originally submitted anonymously,\nto sign the Report.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.update_references\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">update_references</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#update_references\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.update_references\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update the References for a certain Publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.validate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">validate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#validate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.validate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This creates a Publication instance from the ValidatePublicationForm,\npre-filled by the initiate_publication method above.</p>\n</dd></dl>\n\n</div>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "apps/journals.txt", "parents": [{"link": "../", "title": "Apps"}], "alabaster_version": "0.7.10", "meta": {}, "prev": {"link": "../submissions/", "title": "submissions"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">journals</a><ul>\n<li><a class=\"reference internal\" href=\"#module-journals.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-journals.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "next": {"link": "../comments/", "title": "comments"}, "metatags": "", "display_toc": true, "current_page_name": "apps/journals", "customsidebar": null, "sidebars": null, "title": "journals"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"journals\">\n<h1>journals<a class=\"headerlink\" href=\"#journals\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-journals.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-journals.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"journals.models.DOAJDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">DOAJDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#DOAJDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.DOAJDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>For the Directory of Open Access Journals.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Deposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Deposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each time a Crossref deposit is made for a Publication,\na Deposit object instance is created containing the Publication&#8217;s\ncurrent version of the metadata_xml field.\nAll deposit history is thus contained here.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.GenericDOIDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">GenericDOIDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#GenericDOIDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.GenericDOIDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Instances of this class represent Crossref deposits for non-publication\nobjects such as Reports, Comments etc.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Issue\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Issue</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_volume</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>status</em>, <em>doi_label</em>, <em>path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Issue.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Journal\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Journal</code><span class=\"sig-paren\">(</span><em>id</em>, <em>name</em>, <em>doi_label</em>, <em>issn</em>, <em>active</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Journal.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Publication\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Publication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Publication is an object directly related to an accepted Submission. It contains metadata,\nthe actual publication file, author data, etc. etc.</p>\n<dl class=\"method\">\n<dt id=\"journals.models.Publication.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.PublicationAuthorsTable\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">PublicationAuthorsTable</code><span class=\"sig-paren\">(</span><em>id</em>, <em>publication</em>, <em>unregistered_author</em>, <em>contributor</em>, <em>order</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#PublicationAuthorsTable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.PublicationAuthorsTable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Reference\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Reference</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Reference\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Reference\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Refence is a reference used in a specific Publication.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.UnregisteredAuthor\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">UnregisteredAuthor</code><span class=\"sig-paren\">(</span><em>id</em>, <em>first_name</em>, <em>last_name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#UnregisteredAuthor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.UnregisteredAuthor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Volume\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Volume</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_journal</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Volume.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-journals.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-journals.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"journals.views.accepted\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">accepted</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#accepted\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.accepted\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for submissions to SciPost Physics which\nhave been accepted but are not yet published.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_associated_grant\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_associated_grant</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_associated_grant\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_associated_grant\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a grant from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_author\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_author</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>contributor_id=None</em>, <em>unregistered_author_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If not all authors are registered Contributors or if they have not\nall claimed authorship, this method allows editorial administrators\nto associated them to the publication.\nThis is important for the Crossref metadata, in which all authors must appear.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_generic_funder\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_generic_funder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_generic_funder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_generic_funder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a funder (generic, not via grant) from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_citation_list_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_citation_list_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_citation_list_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_citation_list_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the citation_list dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_funding_info_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_funding_info_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_funding_info_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_funding_info_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the funding_info dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_metadata_xml\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_metadata_xml</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_metadata_xml\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_metadata_xml\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>To be called by an EdAdmin after the citation_list,\nfunding_info entries have been filled.\nPopulates the metadata_xml field of a Publication instance.\nThe contents can then be sent to Crossref for registration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.email_object_made_citable\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">email_object_made_citable</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#email_object_made_citable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.email_object_made_citable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to the author of a Report or a Comment,\nto notify that the object has been made citable (doi registered).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.generic_metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">generic_metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#generic_metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.generic_metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method creates the metadata for non-Publication objects\nsuch as Reports and Comments, and deposits the metadata to\nCrossref.\nIf there exists a relation to a SciPost-published object,\nthe deposit uses Crossref&#8217;s peer review content type.\nOtherwise the deposit is done as a dataset.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.initiate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">initiate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#initiate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.initiate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nPublish the manuscript after proofs have been accepted.\nThis method prefills a ValidatePublicationForm for further\nprocessing (verification in validate_publication method).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.journals\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">journals</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#journals\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.journals\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main landing page for Journals application.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_comment_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_comment_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_comment_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_comment_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Comments.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_report_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_report_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_report_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_report_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Reports.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_DOAJ_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_DOAJ_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_DOAJ_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_DOAJ_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>DOAJ metadata deposit.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>option='test'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Crossref metadata deposit.\nIf test==True, test the metadata_xml using the Crossref test server.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.recent\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">recent</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#recent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.recent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for the most recent 20 publications in SciPost Physics.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.sign_existing_report\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">sign_existing_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#sign_existing_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.sign_existing_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Allows the author of a Report, originally submitted anonymously,\nto sign the Report.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.update_references\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">update_references</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#update_references\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.update_references\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update the References for a certain Publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.validate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">validate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#validate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.validate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This creates a Publication instance from the ValidatePublicationForm,\npre-filled by the initiate_publication method above.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/journals", "sourcename": "apps/journals.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../submissions/", "title": "submissions"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/comments", "comments", "N", "next"], ["apps/submissions", "submissions", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">journals</a><ul>\n<li><a class=\"reference internal\" href=\"#module-journals.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-journals.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "journals", "next": {"link": "../comments/", "title": "comments"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/scipost.fjson b/docs/codebase/_build/json/apps/scipost.fjson
index 3ce13eddc64817d91b9268e6ad69b7d57c992174..b5fed6f90dd1b73419ab94da4e8f8868f8b29e91 100644
--- a/docs/codebase/_build/json/apps/scipost.fjson
+++ b/docs/codebase/_build/json/apps/scipost.fjson
@@ -1 +1 @@
-{"sidebars": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/submissions", "submissions", "N", "next"], ["apps", "Apps", "P", "previous"]], "metatags": "", "alabaster_version": "0.7.10", "prev": {"link": "../", "title": "Apps"}, "display_toc": true, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">scipost</a><ul>\n<li><a class=\"reference internal\" href=\"#module-scipost.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "title": "scipost", "meta": {}, "sourcename": "apps/scipost.txt", "parents": [{"link": "../", "title": "Apps"}], "body": "<div class=\"section\" id=\"scipost\">\n<h1>scipost<a class=\"headerlink\" href=\"#scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-scipost.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-scipost.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"scipost.models.AuthorshipClaim\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">AuthorshipClaim</code><span class=\"sig-paren\">(</span><em>id</em>, <em>claimant</em>, <em>publication</em>, <em>submission</em>, <em>commentary</em>, <em>thesislink</em>, <em>vetted_by</em>, <em>status</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#AuthorshipClaim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.AuthorshipClaim\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.CitationNotification\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">CitationNotification</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#CitationNotification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.CitationNotification\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Contributor\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Contributor</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All <em>science</em> users of SciPost are Contributors.\nusername, password, email, first_name and last_name are inherited from User.</p>\n<dl class=\"method\">\n<dt id=\"scipost.models.Contributor.generate_key\">\n<code class=\"descname\">generate_key</code><span class=\"sig-paren\">(</span><em>feed=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor.generate_key\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor.generate_key\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Generate and save a new activation_key for the contributor, given a certain feed.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.DraftInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">DraftInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#DraftInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.DraftInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Draft of an invitation, filled in by an officer.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollege\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollege</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollege\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollege\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A SciPost Editorial College for a specific discipline.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollegeFellowship\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollegeFellowship</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollegeFellowship\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollegeFellowship\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Editorial College Fellowship connecting Editorial College and Contributors,\nmaybe with a limiting start/until date.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.PrecookedEmail\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">PrecookedEmail</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#PrecookedEmail\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.PrecookedEmail\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each instance contains an email template in both plain and html formats.\nCan only be created by Admins.\nFor further use in scipost:send_precooked_email method.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.RegistrationInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">RegistrationInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#RegistrationInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.RegistrationInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Remark\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Remark</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>feedback</em>, <em>nomination</em>, <em>motion</em>, <em>submission</em>, <em>recommendation</em>, <em>date</em>, <em>remark</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.UnavailabilityPeriod\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">UnavailabilityPeriod</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>start</em>, <em>end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#UnavailabilityPeriod\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.UnavailabilityPeriod\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.models.get_sentinel_user\">\n<code class=\"descclassname\">scipost.models.</code><code class=\"descname\">get_sentinel_user</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#get_sentinel_user\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.get_sentinel_user\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Temporary fix: eventually the &#8216;to-be-removed-Contributor&#8217; should be\nstatus: &#8220;deactivated&#8221; and anonymized.\nFallback user for models relying on Contributor that is being deleted.</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-scipost.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-scipost.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"scipost.views.activation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">activation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#activation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.activation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>After registration, an email verification link is sent.\nOnce clicked, the account is activated.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.claim_authorships\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">claim_authorships</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#claim_authorships\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.claim_authorships\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The system auto-detects potential authorships (of submissions,\npapers subject to commentaries, theses, ...).\nThe contributor must confirm/deny authorship from the\nPersonal Page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.contributor_info\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">contributor_info</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#contributor_info\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.contributor_info\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All visitors can see a digest of a\nContributor&#8217;s activities/contributions by clicking\non the relevant name (in listing headers of Submissions, ...).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.csrf_failure\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">csrf_failure</code><span class=\"sig-paren\">(</span><em>request</em>, <em>reason=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#csrf_failure\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.csrf_failure\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Custom CSRF Failure. Informing admins via email as well.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.delete_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">delete_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em>, <em>period_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#delete_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.delete_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Delete period unavailable registered.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_group_members\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_group_members</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_group_members\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_group_members\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send bulk emails to (members of) selected groups</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_particular\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_particular</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_particular\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_particular\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.index\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">index</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.index\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.invitation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If a scientist has recieved an invitation (RegistrationInvitation)\nhe/she will finish it&#8217;s invitation via still view which will prefill\nthe default registration form.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.is_registered\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">is_registered</code><span class=\"sig-paren\">(</span><em>user</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#is_registered\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.is_registered\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method checks if user is activated assuming an validated user\nhas at least one permission group (<cite>Registered Contributor</cite> or <cite>Partner Accounts</cite>).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.login_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">login_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#login_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.login_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view shows and processes a user&#8217;s login session.</p>\n<p>The function based method login() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.logout_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">logout_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#logout_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.logout_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The function based method logout() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.mark_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">mark_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#mark_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.mark_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Mark period unavailable for Contributor using this view.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.personal_page\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">personal_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>tab='account'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#personal_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.personal_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Personal Page is the main view for accessing user functions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.protected_serve\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">protected_serve</code><span class=\"sig-paren\">(</span><em>request</em>, <em>path</em>, <em>show_indexes=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#protected_serve\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.protected_serve\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!\nThis will be usefull eg. in the admin pages.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.register\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">register</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.register\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This public registration view shows and processes the form\nthat will create new user account requests. After registration\nthe Contributor will need to activate its account via the mail\nsent. After activation the user needs to be vetted by the SciPost\nadmin.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>List all inactive users. These are users that have filled the registration form,\nbut did not yet activate their account using the validation email.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests_reset\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests_reset</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests_reset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests_reset\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reset specific activation_key for Contributor and resend activation mail.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.request_new_activation_link\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">request_new_activation_link</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#request_new_activation_link\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.request_new_activation_link\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Once a user tries to activate its account using the email verification link sent\nand the key has expired, the user redirected to possibly request a new token.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.send_precooked_email\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">send_precooked_email</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#send_precooked_email\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.send_precooked_email\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send precooked emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.unsubscribe\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">unsubscribe</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#unsubscribe\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.unsubscribe\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The link to this method is included in all email communications\nwith a Contributor. The key used is the original activation key.\nAt this link, the Contributor can confirm that he/she does not\nwant to receive any non-essential email notifications from SciPost.</p>\n</dd></dl>\n\n</div>\n</div>\n", "next": {"link": "../submissions/", "title": "submissions"}, "current_page_name": "apps/scipost", "page_source_suffix": ".rst", "customsidebar": null}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"scipost\">\n<h1>scipost<a class=\"headerlink\" href=\"#scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-scipost.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-scipost.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"scipost.models.AuthorshipClaim\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">AuthorshipClaim</code><span class=\"sig-paren\">(</span><em>id</em>, <em>claimant</em>, <em>publication</em>, <em>submission</em>, <em>commentary</em>, <em>thesislink</em>, <em>vetted_by</em>, <em>status</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#AuthorshipClaim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.AuthorshipClaim\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.CitationNotification\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">CitationNotification</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#CitationNotification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.CitationNotification\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Contributor\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Contributor</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All <em>science</em> users of SciPost are Contributors.\nusername, password, email, first_name and last_name are inherited from User.</p>\n<dl class=\"method\">\n<dt id=\"scipost.models.Contributor.generate_key\">\n<code class=\"descname\">generate_key</code><span class=\"sig-paren\">(</span><em>feed=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor.generate_key\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor.generate_key\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Generate and save a new activation_key for the contributor, given a certain feed.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.DraftInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">DraftInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#DraftInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.DraftInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Draft of an invitation, filled in by an officer.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollege\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollege</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollege\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollege\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A SciPost Editorial College for a specific discipline.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollegeFellowship\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollegeFellowship</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollegeFellowship\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollegeFellowship\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Editorial College Fellowship connecting Editorial College and Contributors,\nmaybe with a limiting start/until date.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.PrecookedEmail\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">PrecookedEmail</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#PrecookedEmail\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.PrecookedEmail\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each instance contains an email template in both plain and html formats.\nCan only be created by Admins.\nFor further use in scipost:send_precooked_email method.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.RegistrationInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">RegistrationInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#RegistrationInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.RegistrationInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Remark\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Remark</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>feedback</em>, <em>nomination</em>, <em>motion</em>, <em>submission</em>, <em>recommendation</em>, <em>date</em>, <em>remark</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.UnavailabilityPeriod\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">UnavailabilityPeriod</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>start</em>, <em>end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#UnavailabilityPeriod\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.UnavailabilityPeriod\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.models.get_sentinel_user\">\n<code class=\"descclassname\">scipost.models.</code><code class=\"descname\">get_sentinel_user</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#get_sentinel_user\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.get_sentinel_user\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Temporary fix: eventually the &#8216;to-be-removed-Contributor&#8217; should be\nstatus: &#8220;deactivated&#8221; and anonymized.\nFallback user for models relying on Contributor that is being deleted.</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-scipost.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-scipost.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"scipost.views.activation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">activation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#activation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.activation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>After registration, an email verification link is sent.\nOnce clicked, the account is activated.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.claim_authorships\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">claim_authorships</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#claim_authorships\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.claim_authorships\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The system auto-detects potential authorships (of submissions,\npapers subject to commentaries, theses, ...).\nThe contributor must confirm/deny authorship from the\nPersonal Page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.contributor_info\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">contributor_info</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#contributor_info\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.contributor_info\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All visitors can see a digest of a\nContributor&#8217;s activities/contributions by clicking\non the relevant name (in listing headers of Submissions, ...).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.csrf_failure\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">csrf_failure</code><span class=\"sig-paren\">(</span><em>request</em>, <em>reason=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#csrf_failure\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.csrf_failure\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Custom CSRF Failure. Informing admins via email as well.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.delete_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">delete_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em>, <em>period_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#delete_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.delete_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Delete period unavailable registered.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_group_members\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_group_members</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_group_members\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_group_members\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send bulk emails to (members of) selected groups</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_particular\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_particular</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_particular\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_particular\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.index\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">index</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.index\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.invitation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If a scientist has recieved an invitation (RegistrationInvitation)\nhe/she will finish it&#8217;s invitation via still view which will prefill\nthe default registration form.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.is_registered\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">is_registered</code><span class=\"sig-paren\">(</span><em>user</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#is_registered\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.is_registered\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method checks if user is activated assuming an validated user\nhas at least one permission group (<cite>Registered Contributor</cite> or <cite>Partner Accounts</cite>).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.login_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">login_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#login_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.login_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view shows and processes a user&#8217;s login session.</p>\n<p>The function based method login() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.logout_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">logout_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#logout_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.logout_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The function based method logout() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.mark_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">mark_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#mark_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.mark_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Mark period unavailable for Contributor using this view.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.personal_page\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">personal_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>tab='account'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#personal_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.personal_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Personal Page is the main view for accessing user functions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.protected_serve\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">protected_serve</code><span class=\"sig-paren\">(</span><em>request</em>, <em>path</em>, <em>show_indexes=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#protected_serve\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.protected_serve\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!\nThis will be usefull eg. in the admin pages.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.register\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">register</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.register\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This public registration view shows and processes the form\nthat will create new user account requests. After registration\nthe Contributor will need to activate its account via the mail\nsent. After activation the user needs to be vetted by the SciPost\nadmin.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>List all inactive users. These are users that have filled the registration form,\nbut did not yet activate their account using the validation email.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests_reset\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests_reset</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests_reset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests_reset\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reset specific activation_key for Contributor and resend activation mail.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.request_new_activation_link\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">request_new_activation_link</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#request_new_activation_link\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.request_new_activation_link\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Once a user tries to activate its account using the email verification link sent\nand the key has expired, the user redirected to possibly request a new token.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.send_precooked_email\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">send_precooked_email</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#send_precooked_email\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.send_precooked_email\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send precooked emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.unsubscribe\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">unsubscribe</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#unsubscribe\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.unsubscribe\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The link to this method is included in all email communications\nwith a Contributor. The key used is the original activation key.\nAt this link, the Contributor can confirm that he/she does not\nwant to receive any non-essential email notifications from SciPost.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/scipost", "sourcename": "apps/scipost.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../", "title": "Apps"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/submissions", "submissions", "N", "next"], ["apps", "Apps", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">scipost</a><ul>\n<li><a class=\"reference internal\" href=\"#module-scipost.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "scipost", "next": {"link": "../submissions/", "title": "submissions"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/submissions.fjson b/docs/codebase/_build/json/apps/submissions.fjson
index 71ff9b3749f7041d64962167de7b3fade521e081..bc41f12c9c9a6a06565deea153d5ec0698be4f5e 100644
--- a/docs/codebase/_build/json/apps/submissions.fjson
+++ b/docs/codebase/_build/json/apps/submissions.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/journals", "journals", "N", "next"], ["apps/scipost", "scipost", "P", "previous"]], "body": "<div class=\"section\" id=\"submissions\">\n<h1>submissions<a class=\"headerlink\" href=\"#submissions\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-submissions.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-submissions.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"submissions.models.EICRecommendation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EICRecommendation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EICRecommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EICRecommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The EICRecommendation is the recommendation of a Submission written by\nthe Editor-in-charge made at the end of the refereeing cycle. It can be voted for by\na subset of Fellows and should contain the actual publication decision.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialAssignment\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialAssignment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialAssignment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialAssignment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>EditorialAssignment is a registration for Fellows of their duties of being a\nEditor-in-charge for a specific Submission. This model could start as a invitation only,\nwhich should then be accepted or declined by the invited.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialCommunication\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialCommunication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialCommunication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialCommunication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each individual communication between Editor-in-charge\nto and from Referees and Authors becomes an instance of this class.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.RefereeInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">RefereeInvitation</code><span class=\"sig-paren\">(</span><em>id</em>, <em>submission</em>, <em>referee</em>, <em>title</em>, <em>first_name</em>, <em>last_name</em>, <em>email_address</em>, <em>invitation_key</em>, <em>date_invited</em>, <em>invited_by</em>, <em>nr_reminders</em>, <em>date_last_reminded</em>, <em>accepted</em>, <em>date_responded</em>, <em>refusal_reason</em>, <em>fulfilled</em>, <em>cancelled</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#RefereeInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.RefereeInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Report\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Report</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Both types of reports, invited or contributed.</p>\n<p>This Report model acts as both a regular <cite>Report</cite> and a <cite>FollowupReport</cite>; A normal Report\nshould have all fields required, whereas a FollowupReport only has the <cite>report</cite> field as\na required field.</p>\n<p>Important note!\nDue to the construction of the two different types within a single model, it is important\nto explicitly implement the perticular differences in for example the form used.</p>\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.associated_published_doi\">\n<code class=\"descname\">associated_published_doi</code><a class=\"headerlink\" href=\"#submissions.models.Report.associated_published_doi\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return the doi of the published object.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.is_followup_report\">\n<code class=\"descname\">is_followup_report</code><a class=\"headerlink\" href=\"#submissions.models.Report.is_followup_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if current Report is a <cite>FollowupReport</cite>. A Report is a <cite>FollowupReport</cite> if the\nauthor of the report already has a vetted report in the series of the specific Submission.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Report.latest_report_from_series\">\n<code class=\"descname\">latest_report_from_series</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report.latest_report_from_series\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report.latest_report_from_series\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get latest Report from the same author for the Submission series.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#submissions.models.Report.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#submissions.models.Report.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Submission\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Submission</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Submission is a SciPost register of an ArXiv article. This object is the central\ninstance for every action, recommendation, communication, etc. etc. that is related to the\nrefereeing cycle of a Submission. A possible Publication object is later directly related\nto this Submission instance.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.comments_set_complete\">\n<code class=\"descname\">comments_set_complete</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.comments_set_complete\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.comments_set_complete\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return comments to Submission, comments on Reports of Submission and\nnested comments related to this Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions\">\n<code class=\"descname\">other_versions</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission that are publicly accessible.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions_pool\">\n<code class=\"descname\">other_versions_pool</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions_pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.thread\">\n<code class=\"descname\">thread</code><a class=\"headerlink\" href=\"#submissions.models.Submission.thread\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all versions of the Submission with that arxiv id.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.touch\">\n<code class=\"descname\">touch</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.touch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.touch\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update latest activity as a service</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.SubmissionEvent\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">SubmissionEvent</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#SubmissionEvent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.SubmissionEvent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The SubmissionEvent&#8217;s goal is to act as a messaging/logging model\nfor the Submission cycle. Its main audience will be the author(s) and\nthe Editor-in-charge of a Submission.</p>\n<p>Be aware!\nBoth the author and editor-in-charge will read the submission event.\nMake sure the right text is given to the right event-type, to protect\nthe fellow&#8217;s identity.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.iThenticateReport\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">iThenticateReport</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>iThenticateReport is the SciPost register of an iThenticate report. It saves\nbasic information coming from iThenticate into the SciPost database for easy access.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.iThenticateReport.get_report_url\">\n<code class=\"descname\">get_report_url</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport.get_report_url\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport.get_report_url\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Request new read-only url from iThenticate and return.</p>\n<p>Note: The read-only link is valid for only 15 minutes, saving may be worthless</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-submissions.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-submissions.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"submissions.views.accept_or_decline_ref_invitations\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">accept_or_decline_ref_invitations</code><span class=\"sig-paren\">(</span><em>request</em>, <em>invitation_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#accept_or_decline_ref_invitations\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.accept_or_decline_ref_invitations\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>RefereeInvitations need to be either accepted or declined by the invited user\nusing this view. The decision will be taken one invitation at a time.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.add_remark\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">add_remark</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#add_remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.add_remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>With this method, an Editorial Fellow or Board Member\nis adding a remark on a Submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assign_submission\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assign_submission</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assign_submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assign_submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Assign Editor-in-charge to Submission.\nAction done by SciPost Administration or Editorial College Administration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_failed\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_failed</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_failed\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_failed\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>No Editorial Fellow has accepted or volunteered to become Editor-in-charge.\nThe submission is rejected.\nThis method is called from pool.html by an Editorial Administrator.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_request\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>assignment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Process EditorialAssignment acceptance/denial form or show if not submitted.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignments\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignments</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignments\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignments\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page provides a Fellow with an explicit task list\nof editorial actions which should be undertaken.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cancel_ref_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cancel_ref_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cancel_ref_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cancel_ref_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nto remove a referee for the list of invited ones.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.close_refereeing_round\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">close_refereeing_round</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#close_refereeing_round\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.close_refereeing_round\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by the Editor-in-charge when a satisfactory number of\nreports have been gathered.\nAutomatically emails the authors to ask them if they want to\nround off any replies to reports or comments before the\neditorial recommendation is formulated.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.communication\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">communication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>comtype</em>, <em>referee_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#communication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.communication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Communication between editor-in-charge, author or referee\noccurring during the submission refereeing.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cycle_form_submit\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cycle_form_submit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cycle_form_submit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cycle_form_submit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If Submission is <cite>resubmission_incoming</cite> the EIC should first choose what refereeing\ncycle to choose.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_page\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The central page for the EIC to manage all its Editorial duties.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_workflow\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_workflow</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_workflow\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_workflow\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Summary page for Editorial Fellows, containing a digest\nof the actions to take to handle Submissions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Write EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.extend_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">extend_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>days</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#extend_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.extend_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Extend Refereeing deadline for Submission and open reporting and commenting.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.fix_College_decision\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">fix_College_decision</code><span class=\"sig-paren\">(</span><em>request</em>, <em>rec_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#fix_College_decision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.fix_College_decision\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Terminates the voting on a Recommendation.\nCalled by an Editorial Administrator.</p>\n<p># TODO - 2 bugs:</p>\n<p>TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.\nTO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.pool\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">pool</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#pool\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Submissions pool contains all submissions which are undergoing\nthe editorial process, from submission\nto publication acceptance or rejection.\nAll members of the Editorial College have access.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.recruit_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">recruit_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#recruit_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.recruit_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If the Editor-in-charge does not find the desired referee among Contributors\n(otherwise, the method send_refereeing_invitation below is used instead),\nhe/she can invite somebody by providing name + contact details.\nThis function emails a registration invitation to this person.\nThe pending refereeing invitation is then recognized upon registration,\nusing the invitation token.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.ref_invitation_reminder\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">ref_invitation_reminder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#ref_invitation_reminder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.ref_invitation_reminder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nwhen a referee has been invited but hasn&#8217;t answered yet.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reformulate_eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reformulate_eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reformulate_eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reformulate_eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reformulate EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.remind_Fellows_to_vote\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">remind_Fellows_to_vote</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#remind_Fellows_to_vote\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.remind_Fellows_to_vote\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to all Fellow with pending voting duties.\nIt must be called by and Editorial Administrator.</p>\n<p>TODO: This reminder function doesn&#8217;t filter per submission?!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.report_detail_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">report_detail_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>report_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#report_detail_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.report_detail_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Download the PDF of a Report if available.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reports_accepted_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reports_accepted_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reports_accepted_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reports_accepted_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.select_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">select_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#select_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.select_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Select/Invite referees by first listing them here.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.send_refereeing_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">send_refereeing_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#send_refereeing_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.send_refereeing_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is called by the EIC from the submission&#8217;s editorial_page,\nin the case where the referee is an identified Contributor.\nFor a referee who isn&#8217;t a Contributor yet, the method recruit_referee above\nis called instead.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.set_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">set_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#set_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.set_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Set Refereeing deadline for Submission and open reporting and commenting if\nthe new date is in the future.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submission_refereeing_package_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submission_refereeing_package_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submission_refereeing_package_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submission_refereeing_package_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view let&#8217;s the user download all Report PDF&#8217;s in a single merged PDF.\nThe merging takes places every time its downloaded to make sure all available report PDF&#8217;s\nare included and the EdColAdmin doesn&#8217;t have to compile the package every time again.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submit_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submit_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submit_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submit_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A form to submit a report on a submission will be shown and processed here.</p>\n<p>Important checks to be aware of include an author check for the submission,\nhas the reporting deadline not been reached yet and does there exist any invitation\nfor the current user on this submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.treated_submissions_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">treated_submissions_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#treated_submissions_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.treated_submissions_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Report with status <cite>unvetted</cite> will be shown. A user may only vet reports of submissions\nhe/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</p>\n<p>After vetting an email is sent to the report author, bcc EIC. If report\nhas not been refused, the submission author is also mailed.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_reports_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_reports_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_reports_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_reports_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reports with status <cite>unvetted</cite> will be shown (oldest first).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.volunteer_as_EIC\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">volunteer_as_EIC</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#volunteer_as_EIC\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.volunteer_as_EIC\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called when a Fellow volunteers while perusing the submissions pool.\nThis is an adapted version of the assignment_request method.</p>\n</dd></dl>\n\n</div>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "apps/submissions.txt", "parents": [{"link": "../", "title": "Apps"}], "alabaster_version": "0.7.10", "meta": {}, "prev": {"link": "../scipost/", "title": "scipost"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">submissions</a><ul>\n<li><a class=\"reference internal\" href=\"#module-submissions.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "next": {"link": "../journals/", "title": "journals"}, "metatags": "", "display_toc": true, "current_page_name": "apps/submissions", "customsidebar": null, "sidebars": null, "title": "submissions"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"submissions\">\n<h1>submissions<a class=\"headerlink\" href=\"#submissions\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-submissions.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-submissions.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"submissions.models.EICRecommendation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EICRecommendation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EICRecommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EICRecommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The EICRecommendation is the recommendation of a Submission written by\nthe Editor-in-charge made at the end of the refereeing cycle. It can be voted for by\na subset of Fellows and should contain the actual publication decision.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialAssignment\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialAssignment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialAssignment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialAssignment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>EditorialAssignment is a registration for Fellows of their duties of being a\nEditor-in-charge for a specific Submission. This model could start as a invitation only,\nwhich should then be accepted or declined by the invited.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialCommunication\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialCommunication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialCommunication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialCommunication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each individual communication between Editor-in-charge\nto and from Referees and Authors becomes an instance of this class.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.RefereeInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">RefereeInvitation</code><span class=\"sig-paren\">(</span><em>id</em>, <em>submission</em>, <em>referee</em>, <em>title</em>, <em>first_name</em>, <em>last_name</em>, <em>email_address</em>, <em>invitation_key</em>, <em>date_invited</em>, <em>invited_by</em>, <em>nr_reminders</em>, <em>date_last_reminded</em>, <em>accepted</em>, <em>date_responded</em>, <em>refusal_reason</em>, <em>fulfilled</em>, <em>cancelled</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#RefereeInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.RefereeInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Report\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Report</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Both types of reports, invited or contributed.</p>\n<p>This Report model acts as both a regular <cite>Report</cite> and a <cite>FollowupReport</cite>; A normal Report\nshould have all fields required, whereas a FollowupReport only has the <cite>report</cite> field as\na required field.</p>\n<p>Important note!\nDue to the construction of the two different types within a single model, it is important\nto explicitly implement the perticular differences in for example the form used.</p>\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.associated_published_doi\">\n<code class=\"descname\">associated_published_doi</code><a class=\"headerlink\" href=\"#submissions.models.Report.associated_published_doi\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return the doi of the published object.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.is_followup_report\">\n<code class=\"descname\">is_followup_report</code><a class=\"headerlink\" href=\"#submissions.models.Report.is_followup_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if current Report is a <cite>FollowupReport</cite>. A Report is a <cite>FollowupReport</cite> if the\nauthor of the report already has a vetted report in the series of the specific Submission.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Report.latest_report_from_series\">\n<code class=\"descname\">latest_report_from_series</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report.latest_report_from_series\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report.latest_report_from_series\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get latest Report from the same author for the Submission series.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#submissions.models.Report.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#submissions.models.Report.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Submission\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Submission</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Submission is a SciPost register of an ArXiv article. This object is the central\ninstance for every action, recommendation, communication, etc. etc. that is related to the\nrefereeing cycle of a Submission. A possible Publication object is later directly related\nto this Submission instance.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.comments_set_complete\">\n<code class=\"descname\">comments_set_complete</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.comments_set_complete\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.comments_set_complete\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return comments to Submission, comments on Reports of Submission and\nnested comments related to this Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions\">\n<code class=\"descname\">other_versions</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission that are publicly accessible.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions_pool\">\n<code class=\"descname\">other_versions_pool</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions_pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.thread\">\n<code class=\"descname\">thread</code><a class=\"headerlink\" href=\"#submissions.models.Submission.thread\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all versions of the Submission with that arxiv id.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.touch\">\n<code class=\"descname\">touch</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.touch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.touch\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update latest activity as a service</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.SubmissionEvent\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">SubmissionEvent</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#SubmissionEvent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.SubmissionEvent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The SubmissionEvent&#8217;s goal is to act as a messaging/logging model\nfor the Submission cycle. Its main audience will be the author(s) and\nthe Editor-in-charge of a Submission.</p>\n<p>Be aware!\nBoth the author and editor-in-charge will read the submission event.\nMake sure the right text is given to the right event-type, to protect\nthe fellow&#8217;s identity.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.iThenticateReport\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">iThenticateReport</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>iThenticateReport is the SciPost register of an iThenticate report. It saves\nbasic information coming from iThenticate into the SciPost database for easy access.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.iThenticateReport.get_report_url\">\n<code class=\"descname\">get_report_url</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport.get_report_url\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport.get_report_url\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Request new read-only url from iThenticate and return.</p>\n<p>Note: The read-only link is valid for only 15 minutes, saving may be worthless</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-submissions.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-submissions.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"submissions.views.accept_or_decline_ref_invitations\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">accept_or_decline_ref_invitations</code><span class=\"sig-paren\">(</span><em>request</em>, <em>invitation_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#accept_or_decline_ref_invitations\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.accept_or_decline_ref_invitations\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>RefereeInvitations need to be either accepted or declined by the invited user\nusing this view. The decision will be taken one invitation at a time.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.add_remark\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">add_remark</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#add_remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.add_remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>With this method, an Editorial Fellow or Board Member\nis adding a remark on a Submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assign_submission\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assign_submission</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assign_submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assign_submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Assign Editor-in-charge to Submission.\nAction done by SciPost Administration or Editorial College Administration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_failed\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_failed</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_failed\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_failed\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>No Editorial Fellow has accepted or volunteered to become Editor-in-charge.\nThe submission is rejected.\nThis method is called from pool.html by an Editorial Administrator.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_request\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>assignment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Process EditorialAssignment acceptance/denial form or show if not submitted.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignments\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignments</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignments\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignments\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page provides a Fellow with an explicit task list\nof editorial actions which should be undertaken.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cancel_ref_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cancel_ref_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cancel_ref_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cancel_ref_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nto remove a referee for the list of invited ones.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.close_refereeing_round\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">close_refereeing_round</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#close_refereeing_round\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.close_refereeing_round\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by the Editor-in-charge when a satisfactory number of\nreports have been gathered.\nAutomatically emails the authors to ask them if they want to\nround off any replies to reports or comments before the\neditorial recommendation is formulated.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.communication\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">communication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>comtype</em>, <em>referee_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#communication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.communication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Communication between editor-in-charge, author or referee\noccurring during the submission refereeing.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cycle_form_submit\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cycle_form_submit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cycle_form_submit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cycle_form_submit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If Submission is <cite>resubmission_incoming</cite> the EIC should first choose what refereeing\ncycle to choose.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_page\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The central page for the EIC to manage all its Editorial duties.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_workflow\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_workflow</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_workflow\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_workflow\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Summary page for Editorial Fellows, containing a digest\nof the actions to take to handle Submissions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Write EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.extend_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">extend_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>days</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#extend_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.extend_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Extend Refereeing deadline for Submission and open reporting and commenting.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.fix_College_decision\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">fix_College_decision</code><span class=\"sig-paren\">(</span><em>request</em>, <em>rec_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#fix_College_decision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.fix_College_decision\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Terminates the voting on a Recommendation.\nCalled by an Editorial Administrator.</p>\n<p># TODO - 2 bugs:</p>\n<p>TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.\nTO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.pool\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">pool</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#pool\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Submissions pool contains all submissions which are undergoing\nthe editorial process, from submission\nto publication acceptance or rejection.\nAll members of the Editorial College have access.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.recruit_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">recruit_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#recruit_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.recruit_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If the Editor-in-charge does not find the desired referee among Contributors\n(otherwise, the method send_refereeing_invitation below is used instead),\nhe/she can invite somebody by providing name + contact details.\nThis function emails a registration invitation to this person.\nThe pending refereeing invitation is then recognized upon registration,\nusing the invitation token.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.ref_invitation_reminder\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">ref_invitation_reminder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#ref_invitation_reminder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.ref_invitation_reminder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nwhen a referee has been invited but hasn&#8217;t answered yet.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reformulate_eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reformulate_eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reformulate_eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reformulate_eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reformulate EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.remind_Fellows_to_vote\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">remind_Fellows_to_vote</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#remind_Fellows_to_vote\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.remind_Fellows_to_vote\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to all Fellow with pending voting duties.\nIt must be called by and Editorial Administrator.</p>\n<p>TODO: This reminder function doesn&#8217;t filter per submission?!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.report_detail_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">report_detail_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>report_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#report_detail_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.report_detail_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Download the PDF of a Report if available.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reports_accepted_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reports_accepted_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reports_accepted_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reports_accepted_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.select_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">select_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#select_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.select_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Select/Invite referees by first listing them here.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.send_refereeing_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">send_refereeing_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#send_refereeing_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.send_refereeing_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is called by the EIC from the submission&#8217;s editorial_page,\nin the case where the referee is an identified Contributor.\nFor a referee who isn&#8217;t a Contributor yet, the method recruit_referee above\nis called instead.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.set_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">set_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#set_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.set_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Set Refereeing deadline for Submission and open reporting and commenting if\nthe new date is in the future.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submission_refereeing_package_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submission_refereeing_package_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submission_refereeing_package_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submission_refereeing_package_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view let&#8217;s the user download all Report PDF&#8217;s in a single merged PDF.\nThe merging takes places every time its downloaded to make sure all available report PDF&#8217;s\nare included and the EdColAdmin doesn&#8217;t have to compile the package every time again.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submit_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submit_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submit_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submit_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A form to submit a report on a submission will be shown and processed here.</p>\n<p>Important checks to be aware of include an author check for the submission,\nhas the reporting deadline not been reached yet and does there exist any invitation\nfor the current user on this submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.treated_submissions_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">treated_submissions_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#treated_submissions_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.treated_submissions_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Report with status <cite>unvetted</cite> will be shown. A user may only vet reports of submissions\nhe/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</p>\n<p>After vetting an email is sent to the report author, bcc EIC. If report\nhas not been refused, the submission author is also mailed.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_reports_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_reports_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_reports_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_reports_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reports with status <cite>unvetted</cite> will be shown (oldest first).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.volunteer_as_EIC\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">volunteer_as_EIC</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#volunteer_as_EIC\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.volunteer_as_EIC\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called when a Fellow volunteers while perusing the submissions pool.\nThis is an adapted version of the assignment_request method.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/submissions", "sourcename": "apps/submissions.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../scipost/", "title": "scipost"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/journals", "journals", "N", "next"], ["apps/scipost", "scipost", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">submissions</a><ul>\n<li><a class=\"reference internal\" href=\"#module-submissions.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "submissions", "next": {"link": "../journals/", "title": "journals"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/theses.fjson b/docs/codebase/_build/json/apps/theses.fjson
index 622ef784771edcbfa4fd2bcc36ce537ad62eaef3..840ff00210d86f29786ada41bfcfae8cd39cc2c1 100644
--- a/docs/codebase/_build/json/apps/theses.fjson
+++ b/docs/codebase/_build/json/apps/theses.fjson
@@ -1 +1 @@
-{"sidebars": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "P", "previous"]], "metatags": "", "alabaster_version": "0.7.10", "prev": {"link": "../commentaries/", "title": "commentaries"}, "display_toc": true, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">theses</a><ul>\n<li><a class=\"reference internal\" href=\"#module-theses.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "title": "theses", "meta": {}, "sourcename": "apps/theses.txt", "parents": [{"link": "../", "title": "Apps"}], "body": "<div class=\"section\" id=\"theses\">\n<h1>theses<a class=\"headerlink\" href=\"#theses\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-theses.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-theses.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"theses.models.ThesisLink\">\n<em class=\"property\">class </em><code class=\"descclassname\">theses.models.</code><code class=\"descname\">ThesisLink</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/theses/models/#ThesisLink\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#theses.models.ThesisLink\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>An URL pointing to a thesis</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-theses.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-theses.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "next": null, "current_page_name": "apps/theses", "page_source_suffix": ".rst", "customsidebar": null}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"theses\">\n<h1>theses<a class=\"headerlink\" href=\"#theses\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-theses.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-theses.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"theses.models.ThesisLink\">\n<em class=\"property\">class </em><code class=\"descclassname\">theses.models.</code><code class=\"descname\">ThesisLink</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/theses/models/#ThesisLink\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#theses.models.ThesisLink\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>An URL pointing to a thesis</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-theses.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-theses.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "current_page_name": "apps/theses", "sourcename": "apps/theses.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../commentaries/", "title": "commentaries"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">theses</a><ul>\n<li><a class=\"reference internal\" href=\"#module-theses.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "theses", "next": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/environment.pickle b/docs/codebase/_build/json/environment.pickle
index dca504247c14e8c00723956af63278e7c6a42420..3a216e7c1e34f45e2b7de010516855ce8377ea65 100644
Binary files a/docs/codebase/_build/json/environment.pickle and b/docs/codebase/_build/json/environment.pickle differ
diff --git a/docs/codebase/_build/json/genindex.fjson b/docs/codebase/_build/json/genindex.fjson
index 273374e958635fb25a4b5f19f5ee7adfccbf2c36..388906a2368e564ac4093bf8659467c9028f7e33 100644
--- a/docs/codebase/_build/json/genindex.fjson
+++ b/docs/codebase/_build/json/genindex.fjson
@@ -1 +1 @@
-{"split_index": false, "current_page_name": "genindex", "customsidebar": null, "alabaster_version": "0.7.10", "sidebars": null, "genindexcounts": [14, 24, 4, 12, 1, 7, 7, 4, 3, 6, 2, 7, 18, 13, 8, 4, 6], "genindexentries": [["A", [["accept_or_decline_ref_invitations() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.accept_or_decline_ref_invitations"]], [], null]], ["accepted() (in module journals.views)", [[["", "../apps/journals/#journals.views.accepted"]], [], null]], ["activation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.activation"]], [], null]], ["add_associated_grant() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_associated_grant"]], [], null]], ["add_author() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_author"]], [], null]], ["add_generic_funder() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_generic_funder"]], [], null]], ["add_remark() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.add_remark"]], [], null]], ["assign_submission() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assign_submission"]], [], null]], ["assignment_failed() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_failed"]], [], null]], ["assignment_request() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_request"]], [], null]], ["assignments() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignments"]], [], null]], ["associated_published_doi (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.associated_published_doi"]], [], null]], ["attachment() (in module comments.views)", [[["", "../apps/comments/#comments.views.attachment"]], [], null]], ["AuthorshipClaim (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.AuthorshipClaim"]], [], null]]]], ["C", [["cancel_ref_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cancel_ref_invitation"]], [], null]], ["citation_rate() (journals.models.Issue method)", [[["", "../apps/journals/#journals.models.Issue.citation_rate"]], [["(journals.models.Journal method)", [["", "../apps/journals/#journals.models.Journal.citation_rate"]]], ["(journals.models.Publication method)", [["", "../apps/journals/#journals.models.Publication.citation_rate"]]], ["(journals.models.Volume method)", [["", "../apps/journals/#journals.models.Volume.citation_rate"]]]], null]], ["CitationNotification (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.CitationNotification"]], [], null]], ["claim_authorships() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.claim_authorships"]], [], null]], ["close_refereeing_round() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.close_refereeing_round"]], [], null]], ["Comment (class in comments.models)", [[["", "../apps/comments/#comments.models.Comment"]], [], null]], ["comment_on_publication() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.comment_on_publication"]], [], null]], ["commentaries.models (module)", [[["", "../apps/commentaries/#module-commentaries.models"]], [], null]], ["commentaries.views (module)", [[["", "../apps/commentaries/#module-commentaries.views"]], [], null]], ["Commentary (class in commentaries.models)", [[["", "../apps/commentaries/#commentaries.models.Commentary"]], [], null]], ["comments.models (module)", [[["", "../apps/comments/#module-comments.models"]], [], null]], ["comments.views (module)", [[["", "../apps/comments/#module-comments.views"]], [], null]], ["comments_set_complete() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.comments_set_complete"]], [], null]], ["communication() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.communication"]], [], null]], ["Contributor (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Contributor"]], [], null]], ["contributor_info() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.contributor_info"]], [], null]], ["create_citation_list_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_citation_list_metadata"]], [], null]], ["create_funding_info_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_funding_info_metadata"]], [], null]], ["create_metadata_xml() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_metadata_xml"]], [], null]], ["csrf_failure() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.csrf_failure"]], [], null]], ["cycle_form_submit() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cycle_form_submit"]], [], null]]]], ["D", [["delete_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.delete_unavailable_period"]], [], null]], ["Deposit (class in journals.models)", [[["", "../apps/journals/#journals.models.Deposit"]], [], null]], ["DOAJDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.DOAJDeposit"]], [], null]], ["DraftInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.DraftInvitation"]], [], null]]]], ["E", [["editorial_page() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_page"]], [], null]], ["editorial_workflow() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_workflow"]], [], null]], ["EditorialAssignment (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialAssignment"]], [], null]], ["EditorialCollege (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollege"]], [], null]], ["EditorialCollegeFellowship (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollegeFellowship"]], [], null]], ["EditorialCommunication (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialCommunication"]], [], null]], ["eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.eic_recommendation"]], [], null]], ["EICRecommendation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EICRecommendation"]], [], null]], ["email_group_members() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_group_members"]], [], null]], ["email_object_made_citable() (in module journals.views)", [[["", "../apps/journals/#journals.views.email_object_made_citable"]], [], null]], ["email_particular() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_particular"]], [], null]], ["extend_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.extend_refereeing_deadline"]], [], null]]]], ["F", [["fix_College_decision() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.fix_College_decision"]], [], null]]]], ["G", [["generate_key() (scipost.models.Contributor method)", [[["", "../apps/scipost/#scipost.models.Contributor.generate_key"]], [], null]], ["generic_metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.generic_metadata_xml_deposit"]], [], null]], ["GenericDOIDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.GenericDOIDeposit"]], [], null]], ["get_author() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author"]], [], null]], ["get_author_str() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author_str"]], [], null]], ["get_report_url() (submissions.models.iThenticateReport method)", [[["", "../apps/submissions/#submissions.models.iThenticateReport.get_report_url"]], [], null]], ["get_sentinel_user() (in module scipost.models)", [[["", "../apps/scipost/#scipost.models.get_sentinel_user"]], [], null]]]], ["I", [["index() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.index"]], [], null]], ["initiate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.initiate_publication"]], [], null]], ["invitation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.invitation"]], [], null]], ["is_followup_report (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.is_followup_report"]], [], null]], ["is_registered() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.is_registered"]], [], null]], ["Issue (class in journals.models)", [[["", "../apps/journals/#journals.models.Issue"]], [], null]], ["iThenticateReport (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.iThenticateReport"]], [], null]]]], ["J", [["Journal (class in journals.models)", [[["", "../apps/journals/#journals.models.Journal"]], [], null]], ["journals() (in module journals.views)", [[["", "../apps/journals/#journals.views.journals"]], [], null]], ["journals.models (module)", [[["", "../apps/journals/#module-journals.models"]], [], null]], ["journals.views (module)", [[["", "../apps/journals/#module-journals.views"]], [], null]]]], ["L", [["latest_report_from_series() (submissions.models.Report method)", [[["", "../apps/submissions/#submissions.models.Report.latest_report_from_series"]], [], null]], ["login_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.login_view"]], [], null]], ["logout_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.logout_view"]], [], null]]]], ["M", [["manage_comment_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_comment_metadata"]], [], null]], ["manage_report_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_report_metadata"]], [], null]], ["mark_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.mark_unavailable_period"]], [], null]], ["metadata_DOAJ_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_DOAJ_deposit"]], [], null]], ["metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_xml_deposit"]], [], null]], ["modify_commentary_request() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.modify_commentary_request"]], [], null]]]], ["O", [["other_versions (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions"]], [], null]], ["other_versions_pool (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions_pool"]], [], null]]]], ["P", [["parse_links_into_urls() (commentaries.models.Commentary method)", [[["", "../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls"]], [], null]], ["personal_page() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.personal_page"]], [], null]], ["pool() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.pool"]], [], null]], ["PrecookedEmail (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.PrecookedEmail"]], [], null]], ["protected_serve() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.protected_serve"]], [], null]], ["Publication (class in journals.models)", [[["", "../apps/journals/#journals.models.Publication"]], [], null]], ["PublicationAuthorsTable (class in journals.models)", [[["", "../apps/journals/#journals.models.PublicationAuthorsTable"]], [], null]]]], ["R", [["recent() (in module journals.views)", [[["", "../apps/journals/#journals.views.recent"]], [], null]], ["recruit_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.recruit_referee"]], [], null]], ["ref_invitation_reminder() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.ref_invitation_reminder"]], [], null]], ["RefereeInvitation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.RefereeInvitation"]], [], null]], ["Reference (class in journals.models)", [[["", "../apps/journals/#journals.models.Reference"]], [], null]], ["reformulate_eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reformulate_eic_recommendation"]], [], null]], ["register() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.register"]], [], null]], ["registration_requests() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests"]], [], null]], ["registration_requests_reset() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests_reset"]], [], null]], ["RegistrationInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.RegistrationInvitation"]], [], null]], ["relation_to_published (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.relation_to_published"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.relation_to_published"]]]], null]], ["Remark (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Remark"]], [], null]], ["remind_Fellows_to_vote() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.remind_Fellows_to_vote"]], [], null]], ["Report (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Report"]], [], null]], ["report_detail_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.report_detail_pdf"]], [], null]], ["reports_accepted_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reports_accepted_list"]], [], null]], ["request_new_activation_link() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.request_new_activation_link"]], [], null]]]], ["S", [["scipost.models (module)", [[["", "../apps/scipost/#module-scipost.models"]], [], null]], ["scipost.views (module)", [[["", "../apps/scipost/#module-scipost.views"]], [], null]], ["select_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.select_referee"]], [], null]], ["send_precooked_email() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.send_precooked_email"]], [], null]], ["send_refereeing_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.send_refereeing_invitation"]], [], null]], ["set_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.set_refereeing_deadline"]], [], null]], ["sign_existing_report() (in module journals.views)", [[["", "../apps/journals/#journals.views.sign_existing_report"]], [], null]], ["Submission (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Submission"]], [], null]], ["submission_refereeing_package_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submission_refereeing_package_pdf"]], [], null]], ["SubmissionEvent (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.SubmissionEvent"]], [], null]], ["submissions.models (module)", [[["", "../apps/submissions/#module-submissions.models"]], [], null]], ["submissions.views (module)", [[["", "../apps/submissions/#module-submissions.views"]], [], null]], ["submit_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submit_report"]], [], null]]]], ["T", [["theses.models (module)", [[["", "../apps/theses/#module-theses.models"]], [], null]], ["theses.views (module)", [[["", "../apps/theses/#module-theses.views"]], [], null]], ["ThesisLink (class in theses.models)", [[["", "../apps/theses/#theses.models.ThesisLink"]], [], null]], ["thread (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.thread"]], [], null]], ["title (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.title"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.title"]]]], null]], ["touch() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.touch"]], [], null]], ["treated_submissions_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.treated_submissions_list"]], [], null]]]], ["U", [["UnavailabilityPeriod (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.UnavailabilityPeriod"]], [], null]], ["UnregisteredAuthor (class in journals.models)", [[["", "../apps/journals/#journals.models.UnregisteredAuthor"]], [], null]], ["unsubscribe() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.unsubscribe"]], [], null]], ["update_references() (in module journals.views)", [[["", "../apps/journals/#journals.views.update_references"]], [], null]]]], ["V", [["validate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.validate_publication"]], [], null]], ["vet_commentary_requests() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.vet_commentary_requests"]], [], null]], ["vet_submitted_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_report"]], [], null]], ["vet_submitted_reports_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_reports_list"]], [], null]], ["Volume (class in journals.models)", [[["", "../apps/journals/#journals.models.Volume"]], [], null]], ["volunteer_as_EIC() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.volunteer_as_EIC"]], [], null]]]]]}
\ No newline at end of file
+{"customsidebar": null, "genindexentries": [["A", [["accept_or_decline_ref_invitations() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.accept_or_decline_ref_invitations"]], [], null]], ["accepted() (in module journals.views)", [[["", "../apps/journals/#journals.views.accepted"]], [], null]], ["activation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.activation"]], [], null]], ["add_associated_grant() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_associated_grant"]], [], null]], ["add_author() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_author"]], [], null]], ["add_generic_funder() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_generic_funder"]], [], null]], ["add_remark() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.add_remark"]], [], null]], ["assign_submission() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assign_submission"]], [], null]], ["assignment_failed() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_failed"]], [], null]], ["assignment_request() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_request"]], [], null]], ["assignments() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignments"]], [], null]], ["associated_published_doi (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.associated_published_doi"]], [], null]], ["attachment() (in module comments.views)", [[["", "../apps/comments/#comments.views.attachment"]], [], null]], ["AuthorshipClaim (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.AuthorshipClaim"]], [], null]]]], ["C", [["cancel_ref_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cancel_ref_invitation"]], [], null]], ["citation_rate() (journals.models.Issue method)", [[["", "../apps/journals/#journals.models.Issue.citation_rate"]], [["(journals.models.Journal method)", [["", "../apps/journals/#journals.models.Journal.citation_rate"]]], ["(journals.models.Publication method)", [["", "../apps/journals/#journals.models.Publication.citation_rate"]]], ["(journals.models.Volume method)", [["", "../apps/journals/#journals.models.Volume.citation_rate"]]]], null]], ["CitationNotification (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.CitationNotification"]], [], null]], ["claim_authorships() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.claim_authorships"]], [], null]], ["close_refereeing_round() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.close_refereeing_round"]], [], null]], ["Comment (class in comments.models)", [[["", "../apps/comments/#comments.models.Comment"]], [], null]], ["comment_on_publication() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.comment_on_publication"]], [], null]], ["commentaries.models (module)", [[["", "../apps/commentaries/#module-commentaries.models"]], [], null]], ["commentaries.views (module)", [[["", "../apps/commentaries/#module-commentaries.views"]], [], null]], ["Commentary (class in commentaries.models)", [[["", "../apps/commentaries/#commentaries.models.Commentary"]], [], null]], ["comments.models (module)", [[["", "../apps/comments/#module-comments.models"]], [], null]], ["comments.views (module)", [[["", "../apps/comments/#module-comments.views"]], [], null]], ["comments_set_complete() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.comments_set_complete"]], [], null]], ["communication() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.communication"]], [], null]], ["Contributor (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Contributor"]], [], null]], ["contributor_info() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.contributor_info"]], [], null]], ["create_citation_list_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_citation_list_metadata"]], [], null]], ["create_funding_info_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_funding_info_metadata"]], [], null]], ["create_metadata_xml() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_metadata_xml"]], [], null]], ["csrf_failure() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.csrf_failure"]], [], null]], ["cycle_form_submit() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cycle_form_submit"]], [], null]]]], ["D", [["delete_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.delete_unavailable_period"]], [], null]], ["Deposit (class in journals.models)", [[["", "../apps/journals/#journals.models.Deposit"]], [], null]], ["DOAJDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.DOAJDeposit"]], [], null]], ["DraftInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.DraftInvitation"]], [], null]]]], ["E", [["editorial_page() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_page"]], [], null]], ["editorial_workflow() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_workflow"]], [], null]], ["EditorialAssignment (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialAssignment"]], [], null]], ["EditorialCollege (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollege"]], [], null]], ["EditorialCollegeFellowship (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollegeFellowship"]], [], null]], ["EditorialCommunication (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialCommunication"]], [], null]], ["eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.eic_recommendation"]], [], null]], ["EICRecommendation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EICRecommendation"]], [], null]], ["email_group_members() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_group_members"]], [], null]], ["email_object_made_citable() (in module journals.views)", [[["", "../apps/journals/#journals.views.email_object_made_citable"]], [], null]], ["email_particular() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_particular"]], [], null]], ["extend_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.extend_refereeing_deadline"]], [], null]]]], ["F", [["fix_College_decision() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.fix_College_decision"]], [], null]]]], ["G", [["generate_key() (scipost.models.Contributor method)", [[["", "../apps/scipost/#scipost.models.Contributor.generate_key"]], [], null]], ["generic_metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.generic_metadata_xml_deposit"]], [], null]], ["GenericDOIDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.GenericDOIDeposit"]], [], null]], ["get_author() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author"]], [], null]], ["get_author_str() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author_str"]], [], null]], ["get_report_url() (submissions.models.iThenticateReport method)", [[["", "../apps/submissions/#submissions.models.iThenticateReport.get_report_url"]], [], null]], ["get_sentinel_user() (in module scipost.models)", [[["", "../apps/scipost/#scipost.models.get_sentinel_user"]], [], null]]]], ["I", [["index() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.index"]], [], null]], ["initiate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.initiate_publication"]], [], null]], ["invitation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.invitation"]], [], null]], ["is_followup_report (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.is_followup_report"]], [], null]], ["is_registered() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.is_registered"]], [], null]], ["Issue (class in journals.models)", [[["", "../apps/journals/#journals.models.Issue"]], [], null]], ["iThenticateReport (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.iThenticateReport"]], [], null]]]], ["J", [["Journal (class in journals.models)", [[["", "../apps/journals/#journals.models.Journal"]], [], null]], ["journals() (in module journals.views)", [[["", "../apps/journals/#journals.views.journals"]], [], null]], ["journals.models (module)", [[["", "../apps/journals/#module-journals.models"]], [], null]], ["journals.views (module)", [[["", "../apps/journals/#module-journals.views"]], [], null]]]], ["L", [["latest_report_from_series() (submissions.models.Report method)", [[["", "../apps/submissions/#submissions.models.Report.latest_report_from_series"]], [], null]], ["login_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.login_view"]], [], null]], ["logout_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.logout_view"]], [], null]]]], ["M", [["manage_comment_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_comment_metadata"]], [], null]], ["manage_report_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_report_metadata"]], [], null]], ["mark_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.mark_unavailable_period"]], [], null]], ["metadata_DOAJ_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_DOAJ_deposit"]], [], null]], ["metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_xml_deposit"]], [], null]], ["modify_commentary_request() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.modify_commentary_request"]], [], null]]]], ["O", [["other_versions (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions"]], [], null]], ["other_versions_pool (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions_pool"]], [], null]]]], ["P", [["parse_links_into_urls() (commentaries.models.Commentary method)", [[["", "../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls"]], [], null]], ["personal_page() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.personal_page"]], [], null]], ["pool() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.pool"]], [], null]], ["PrecookedEmail (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.PrecookedEmail"]], [], null]], ["protected_serve() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.protected_serve"]], [], null]], ["Publication (class in journals.models)", [[["", "../apps/journals/#journals.models.Publication"]], [], null]], ["PublicationAuthorsTable (class in journals.models)", [[["", "../apps/journals/#journals.models.PublicationAuthorsTable"]], [], null]]]], ["R", [["recent() (in module journals.views)", [[["", "../apps/journals/#journals.views.recent"]], [], null]], ["recruit_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.recruit_referee"]], [], null]], ["ref_invitation_reminder() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.ref_invitation_reminder"]], [], null]], ["RefereeInvitation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.RefereeInvitation"]], [], null]], ["Reference (class in journals.models)", [[["", "../apps/journals/#journals.models.Reference"]], [], null]], ["reformulate_eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reformulate_eic_recommendation"]], [], null]], ["register() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.register"]], [], null]], ["registration_requests() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests"]], [], null]], ["registration_requests_reset() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests_reset"]], [], null]], ["RegistrationInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.RegistrationInvitation"]], [], null]], ["relation_to_published (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.relation_to_published"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.relation_to_published"]]]], null]], ["Remark (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Remark"]], [], null]], ["remind_Fellows_to_vote() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.remind_Fellows_to_vote"]], [], null]], ["Report (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Report"]], [], null]], ["report_detail_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.report_detail_pdf"]], [], null]], ["reports_accepted_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reports_accepted_list"]], [], null]], ["request_new_activation_link() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.request_new_activation_link"]], [], null]]]], ["S", [["scipost.models (module)", [[["", "../apps/scipost/#module-scipost.models"]], [], null]], ["scipost.views (module)", [[["", "../apps/scipost/#module-scipost.views"]], [], null]], ["select_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.select_referee"]], [], null]], ["send_precooked_email() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.send_precooked_email"]], [], null]], ["send_refereeing_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.send_refereeing_invitation"]], [], null]], ["set_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.set_refereeing_deadline"]], [], null]], ["sign_existing_report() (in module journals.views)", [[["", "../apps/journals/#journals.views.sign_existing_report"]], [], null]], ["Submission (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Submission"]], [], null]], ["submission_refereeing_package_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submission_refereeing_package_pdf"]], [], null]], ["SubmissionEvent (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.SubmissionEvent"]], [], null]], ["submissions.models (module)", [[["", "../apps/submissions/#module-submissions.models"]], [], null]], ["submissions.views (module)", [[["", "../apps/submissions/#module-submissions.views"]], [], null]], ["submit_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submit_report"]], [], null]]]], ["T", [["theses.models (module)", [[["", "../apps/theses/#module-theses.models"]], [], null]], ["theses.views (module)", [[["", "../apps/theses/#module-theses.views"]], [], null]], ["ThesisLink (class in theses.models)", [[["", "../apps/theses/#theses.models.ThesisLink"]], [], null]], ["thread (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.thread"]], [], null]], ["title (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.title"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.title"]]]], null]], ["touch() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.touch"]], [], null]], ["treated_submissions_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.treated_submissions_list"]], [], null]]]], ["U", [["UnavailabilityPeriod (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.UnavailabilityPeriod"]], [], null]], ["UnregisteredAuthor (class in journals.models)", [[["", "../apps/journals/#journals.models.UnregisteredAuthor"]], [], null]], ["unsubscribe() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.unsubscribe"]], [], null]], ["update_references() (in module journals.views)", [[["", "../apps/journals/#journals.views.update_references"]], [], null]]]], ["V", [["validate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.validate_publication"]], [], null]], ["vet_commentary_requests() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.vet_commentary_requests"]], [], null]], ["vet_submitted_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_report"]], [], null]], ["vet_submitted_reports_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_reports_list"]], [], null]], ["Volume (class in journals.models)", [[["", "../apps/journals/#journals.models.Volume"]], [], null]], ["volunteer_as_EIC() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.volunteer_as_EIC"]], [], null]]]]], "split_index": false, "current_page_name": "genindex", "genindexcounts": [14, 24, 4, 12, 1, 7, 7, 4, 3, 6, 2, 7, 18, 13, 8, 4, 6], "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/index.fjson b/docs/codebase/_build/json/index.fjson
index aef781a85249dfa34db707ccc57ff15ec67554f5..41083c153310813ab4793aaba42932b7675205e0 100644
--- a/docs/codebase/_build/json/index.fjson
+++ b/docs/codebase/_build/json/index.fjson
@@ -1 +1 @@
-{"rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance", "Maintenance", "N", "next"]], "body": "<div class=\"section\" id=\"welcome-to-scipost-s-codebase-documentation\">\n<h1>Welcome to SciPost&#8217;s codebase documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-codebase-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/docs/\">Maintenance of SciPost documentation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"apps/\">Apps</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/scipost/\">scipost</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/submissions/\">submissions</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/journals/\">journals</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/comments/\">comments</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/commentaries/\">commentaries</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/theses/\">theses</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "page_source_suffix": ".rst", "sourcename": "index.txt", "parents": [], "alabaster_version": "0.7.10", "meta": {}, "prev": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s codebase documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "next": {"link": "maintenance/", "title": "Maintenance"}, "metatags": "", "display_toc": true, "current_page_name": "index", "customsidebar": null, "sidebars": null, "title": "Welcome to SciPost&#8217;s codebase documentation"}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"welcome-to-scipost-s-codebase-documentation\">\n<h1>Welcome to SciPost&#8217;s codebase documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-codebase-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/docs/\">Maintenance of SciPost documentation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"apps/\">Apps</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/scipost/\">scipost</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/submissions/\">submissions</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/journals/\">journals</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/comments/\">comments</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/commentaries/\">commentaries</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/theses/\">theses</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "current_page_name": "index", "sourcename": "index.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance", "Maintenance", "N", "next"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s codebase documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "Welcome to SciPost&#8217;s codebase documentation", "next": {"link": "maintenance/", "title": "Maintenance"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/maintenance.fjson b/docs/codebase/_build/json/maintenance.fjson
index ac789bcc642ed2a6a8f2caf7fdd6825b6ce31f4d..9e2c48154f75de1e614243e509ce57f5bb1acc91 100644
--- a/docs/codebase/_build/json/maintenance.fjson
+++ b/docs/codebase/_build/json/maintenance.fjson
@@ -1 +1 @@
-{"sidebars": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance/docs", "Maintenance of SciPost documentation", "N", "next"], ["index", "Welcome to SciPost&#8217;s codebase documentation", "P", "previous"]], "metatags": "", "alabaster_version": "0.7.10", "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s codebase documentation"}, "display_toc": false, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance</a></li>\n</ul>\n", "title": "Maintenance", "meta": {}, "sourcename": "maintenance.txt", "parents": [], "body": "<div class=\"section\" id=\"maintenance\">\n<h1>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"docs/\">Maintenance of SciPost documentation</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinx-generated-docs\">Sphinx-generated docs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "next": {"link": "docs/", "title": "Maintenance of SciPost documentation"}, "current_page_name": "maintenance", "page_source_suffix": ".rst", "customsidebar": null}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"maintenance\">\n<h1>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"docs/\">Maintenance of SciPost documentation</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinx-generated-docs\">Sphinx-generated docs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "current_page_name": "maintenance", "sourcename": "maintenance.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s codebase documentation"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance/docs", "Maintenance of SciPost documentation", "N", "next"], ["index", "Welcome to SciPost&#8217;s codebase documentation", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance</a></li>\n</ul>\n", "display_toc": false, "metatags": "", "sidebars": null, "title": "Maintenance", "next": {"link": "docs/", "title": "Maintenance of SciPost documentation"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/maintenance/docs.fjson b/docs/codebase/_build/json/maintenance/docs.fjson
index 75221351fcd34fe46355dd8f648e78bd677ae7a4..8c445cd1bf168e55e6c52bb86fdf747a04779345 100644
--- a/docs/codebase/_build/json/maintenance/docs.fjson
+++ b/docs/codebase/_build/json/maintenance/docs.fjson
@@ -1 +1 @@
-{"sidebars": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps", "Apps", "N", "next"], ["maintenance", "Maintenance", "P", "previous"]], "metatags": "", "alabaster_version": "0.7.10", "prev": {"link": "../", "title": "Maintenance"}, "display_toc": true, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost documentation</a><ul>\n<li><a class=\"reference internal\" href=\"#sphinx-generated-docs\">Sphinx-generated docs</a><ul>\n<li><a class=\"reference internal\" href=\"#generating-the-static-html-files\">Generating the static html files</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a><ul>\n<li><a class=\"reference internal\" href=\"#updating-the-docs\">Updating the docs:</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "title": "Maintenance of SciPost documentation", "meta": {}, "sourcename": "maintenance/docs.txt", "parents": [{"link": "../", "title": "Maintenance"}], "body": "<div class=\"section\" id=\"maintenance-of-scipost-documentation\">\n<h1>Maintenance of SciPost documentation<a class=\"headerlink\" href=\"#maintenance-of-scipost-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"sphinx-generated-docs\">\n<h2>Sphinx-generated docs<a class=\"headerlink\" href=\"#sphinx-generated-docs\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"generating-the-static-html-files\">\n<h3>Generating the static html files<a class=\"headerlink\" href=\"#generating-the-static-html-files\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>In the <cite>docs</cite> subfolders <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>, invoke <code class=\"docutils literal\"><span class=\"pre\">make</span> <span class=\"pre\">html</span></code>. The html files will be automatically generated and put in <cite>_build/html</cite> subfolders.</p>\n</div>\n</div>\n<div class=\"section\" id=\"sphinxdoc-generated-docs-viewable-online\">\n<h2>Sphinxdoc-generated docs (viewable online)<a class=\"headerlink\" href=\"#sphinxdoc-generated-docs-viewable-online\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"updating-the-docs\">\n<h3>Updating the docs:<a class=\"headerlink\" href=\"#updating-the-docs\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Use the management command <code class=\"docutils literal\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">updatedoc</span> <span class=\"pre\">-b</span> <span class=\"pre\">&lt;project-slug&gt;</span></code> with slugs <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>.</p>\n</div>\n</div>\n</div>\n", "next": {"link": "../../apps/", "title": "Apps"}, "current_page_name": "maintenance/docs", "page_source_suffix": ".rst", "customsidebar": null}
\ No newline at end of file
+{"customsidebar": null, "body": "<div class=\"section\" id=\"maintenance-of-scipost-documentation\">\n<h1>Maintenance of SciPost documentation<a class=\"headerlink\" href=\"#maintenance-of-scipost-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"sphinx-generated-docs\">\n<h2>Sphinx-generated docs<a class=\"headerlink\" href=\"#sphinx-generated-docs\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"generating-the-static-html-files\">\n<h3>Generating the static html files<a class=\"headerlink\" href=\"#generating-the-static-html-files\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>In the <cite>docs</cite> subfolders <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>, invoke <code class=\"docutils literal\"><span class=\"pre\">make</span> <span class=\"pre\">html</span></code>. The html files will be automatically generated and put in <cite>_build/html</cite> subfolders.</p>\n</div>\n</div>\n<div class=\"section\" id=\"sphinxdoc-generated-docs-viewable-online\">\n<h2>Sphinxdoc-generated docs (viewable online)<a class=\"headerlink\" href=\"#sphinxdoc-generated-docs-viewable-online\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"setting-things-up\">\n<h3>Setting things up<a class=\"headerlink\" href=\"#setting-things-up\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>The <cite>django-sphinxdoc</cite> app creates <cite>Project</cite> and <cite>Document</cite> classes. In the admin, one should create the following projects (slug in parentheses):</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li>SciPost Admin (admin)</li>\n<li>SciPost Codebase (codebase)</li>\n<li>SciPost Users (users)</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"updating-the-docs\">\n<h3>Updating the docs:<a class=\"headerlink\" href=\"#updating-the-docs\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Use the management command <code class=\"docutils literal\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">updatedoc</span> <span class=\"pre\">-b</span> <span class=\"pre\">&lt;project-slug&gt;</span></code> with slugs <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>.</p>\n</div>\n</div>\n</div>\n", "current_page_name": "maintenance/docs", "sourcename": "maintenance/docs.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Maintenance"}], "prev": {"link": "../", "title": "Maintenance"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps", "Apps", "N", "next"], ["maintenance", "Maintenance", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost documentation</a><ul>\n<li><a class=\"reference internal\" href=\"#sphinx-generated-docs\">Sphinx-generated docs</a><ul>\n<li><a class=\"reference internal\" href=\"#generating-the-static-html-files\">Generating the static html files</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a><ul>\n<li><a class=\"reference internal\" href=\"#setting-things-up\">Setting things up</a></li>\n<li><a class=\"reference internal\" href=\"#updating-the-docs\">Updating the docs:</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "Maintenance of SciPost documentation", "next": {"link": "../../apps/", "title": "Apps"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/py-modindex.fjson b/docs/codebase/_build/json/py-modindex.fjson
index d3d0c8f385cae2c53d05e879187560a2ccb1c666..8b4e73de9734efa561fa2eb371cc7856ac64a326 100644
--- a/docs/codebase/_build/json/py-modindex.fjson
+++ b/docs/codebase/_build/json/py-modindex.fjson
@@ -1 +1 @@
-{"indextitle": "Python Module Index", "content": [["c", [["commentaries", 1, "", "", "", "", ""], ["commentaries.models", 2, "apps/commentaries", "module-commentaries.models", "", "", ""], ["commentaries.views", 2, "apps/commentaries", "module-commentaries.views", "", "", ""], ["comments", 1, "", "", "", "", ""], ["comments.models", 2, "apps/comments", "module-comments.models", "", "", ""], ["comments.views", 2, "apps/comments", "module-comments.views", "", "", ""]]], ["j", [["journals", 1, "", "", "", "", ""], ["journals.models", 2, "apps/journals", "module-journals.models", "", "", ""], ["journals.views", 2, "apps/journals", "module-journals.views", "", "", ""]]], ["s", [["scipost", 1, "", "", "", "", ""], ["scipost.models", 2, "apps/scipost", "module-scipost.models", "", "", ""], ["scipost.views", 2, "apps/scipost", "module-scipost.views", "", "", ""], ["submissions", 1, "", "", "", "", ""], ["submissions.models", 2, "apps/submissions", "module-submissions.models", "", "", ""], ["submissions.views", 2, "apps/submissions", "module-submissions.views", "", "", ""]]], ["t", [["theses", 1, "", "", "", "", ""], ["theses.models", 2, "apps/theses", "module-theses.models", "", "", ""], ["theses.views", 2, "apps/theses", "module-theses.views", "", "", ""]]]], "current_page_name": "py-modindex", "customsidebar": null, "alabaster_version": "0.7.10", "sidebars": null, "collapse_index": false}
\ No newline at end of file
+{"customsidebar": null, "collapse_index": false, "content": [["c", [["commentaries", 1, "", "", "", "", ""], ["commentaries.models", 2, "apps/commentaries", "module-commentaries.models", "", "", ""], ["commentaries.views", 2, "apps/commentaries", "module-commentaries.views", "", "", ""], ["comments", 1, "", "", "", "", ""], ["comments.models", 2, "apps/comments", "module-comments.models", "", "", ""], ["comments.views", 2, "apps/comments", "module-comments.views", "", "", ""]]], ["j", [["journals", 1, "", "", "", "", ""], ["journals.models", 2, "apps/journals", "module-journals.models", "", "", ""], ["journals.views", 2, "apps/journals", "module-journals.views", "", "", ""]]], ["s", [["scipost", 1, "", "", "", "", ""], ["scipost.models", 2, "apps/scipost", "module-scipost.models", "", "", ""], ["scipost.views", 2, "apps/scipost", "module-scipost.views", "", "", ""], ["submissions", 1, "", "", "", "", ""], ["submissions.models", 2, "apps/submissions", "module-submissions.models", "", "", ""], ["submissions.views", 2, "apps/submissions", "module-submissions.views", "", "", ""]]], ["t", [["theses", 1, "", "", "", "", ""], ["theses.models", 2, "apps/theses", "module-theses.models", "", "", ""], ["theses.views", 2, "apps/theses", "module-theses.views", "", "", ""]]]], "current_page_name": "py-modindex", "indextitle": "Python Module Index", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/search.fjson b/docs/codebase/_build/json/search.fjson
index 10079840af71f07ce90310616e308c33c7ee474b..098d2c3dac11424fdaee026fa2e7223588813877 100644
--- a/docs/codebase/_build/json/search.fjson
+++ b/docs/codebase/_build/json/search.fjson
@@ -1 +1 @@
-{"customsidebar": null, "alabaster_version": "0.7.10", "sidebars": null, "current_page_name": "search"}
\ No newline at end of file
+{"customsidebar": null, "current_page_name": "search", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/users/_build/doctrees/environment.pickle b/docs/users/_build/doctrees/environment.pickle
index f36a141abbf984fc962c8d776603592c761dae06..9bc8483761f10f56655e27f1e56548580c0aff2b 100644
Binary files a/docs/users/_build/doctrees/environment.pickle and b/docs/users/_build/doctrees/environment.pickle differ
diff --git a/docs/users/_build/doctrees/guides.doctree b/docs/users/_build/doctrees/guides.doctree
index b4d8df0fcff27767284633340b78f6914d09e14b..79cd27082c8a6b07635b66aa97da9b83a7f73ff6 100644
Binary files a/docs/users/_build/doctrees/guides.doctree and b/docs/users/_build/doctrees/guides.doctree differ
diff --git a/docs/users/_build/doctrees/guides/authors.doctree b/docs/users/_build/doctrees/guides/authors.doctree
index 618ab3c7512ce86b1f920636d29df8d45be9bcb4..076ff27dd228f3095386555a1d487e1aa944f660 100644
Binary files a/docs/users/_build/doctrees/guides/authors.doctree and b/docs/users/_build/doctrees/guides/authors.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial.doctree b/docs/users/_build/doctrees/guides/editorial.doctree
index 3f67030c81f2ecd7b0f7b1cafdc182fd7d0af256..2927d58886c19ffc8d7dc38a0aa4beffa3c4f2a7 100644
Binary files a/docs/users/_build/doctrees/guides/editorial.doctree and b/docs/users/_build/doctrees/guides/editorial.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/maintenance.doctree b/docs/users/_build/doctrees/guides/editorial/maintenance.doctree
index d7d29e4d8120cde6fef14bcb1229f66269ed65c5..443c9234d35cccb0b10afa478b6a629dc7b68a13 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/maintenance.doctree and b/docs/users/_build/doctrees/guides/editorial/maintenance.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production.doctree b/docs/users/_build/doctrees/guides/editorial/production.doctree
index dafa832b9e065de54c291dc1456e4343ed2bf174..47967806e04e8fbb9659f73dd2bdae20867c569f 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/production.doctree and b/docs/users/_build/doctrees/guides/editorial/production.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree b/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree
index 389e50b4ef1f4decae4f342a2b1a68bae569b1e7..4e9e9a0814350ab28364197547bd82afc89cb1c2 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree and b/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree b/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree
index 7cef22a26561a68d736b8ff699d5ad255dba97b2..d738162e1d1458fa96710e7317c1f5d60a04490a 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree and b/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree b/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree
index 8e3e329537046fb0805c8bea57a16dc81c9eec83..5b1f7c3022e4c7c83900c39120cace83abd76c7d 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree and b/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree b/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree
index cbabd53fd401a616d224c375afeec5f30273adce..6ade16a489b1c1ff55ef39afa860bb6e1e3ebf7a 100644
Binary files a/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree and b/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree differ
diff --git a/docs/users/_build/doctrees/guides/referees.doctree b/docs/users/_build/doctrees/guides/referees.doctree
index f9f5948a636c0b1a9a42b3daddeab9e15e319297..58c3aaeb1152833a377ac61adc8dc8b5cfe3e942 100644
Binary files a/docs/users/_build/doctrees/guides/referees.doctree and b/docs/users/_build/doctrees/guides/referees.doctree differ
diff --git a/docs/users/_build/doctrees/index.doctree b/docs/users/_build/doctrees/index.doctree
index 530583818e32200738bee46ee4365059e66f342a..fd075e681585e23734570086494233e225eac2fc 100644
Binary files a/docs/users/_build/doctrees/index.doctree and b/docs/users/_build/doctrees/index.doctree differ
diff --git a/docs/users/_build/doctrees/roles.doctree b/docs/users/_build/doctrees/roles.doctree
index a3db21190ba2f7a6d9ba361b7da8554bb9107e8e..4cf8d9cc4c91b7d1a30da06e259bcc7cf3fd3735 100644
Binary files a/docs/users/_build/doctrees/roles.doctree and b/docs/users/_build/doctrees/roles.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial.doctree b/docs/users/_build/doctrees/roles/editorial.doctree
index db65bcbe4986268b995da403b26612c1ef15f130..0d3a391cfd805f5d8d0cd68b1c203c1c2c6642ba 100644
Binary files a/docs/users/_build/doctrees/roles/editorial.doctree and b/docs/users/_build/doctrees/roles/editorial.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree b/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree
index 8af42d8d6422656a5473826e9a4c30ed44010ca9..c3e6d91b8b7fb9e5f98273874a1946b680df3a5b 100644
Binary files a/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree and b/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree b/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree
index 375f6a7e03b6b63e6e089af61643793ad99607a7..feb966b8e201430fe045729a39f11342f5e62b58 100644
Binary files a/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree and b/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production.doctree b/docs/users/_build/doctrees/roles/production.doctree
index da2794c67863a746eeff0e7245748f2dc3ac224e..1398836f443dbe829223b4125d08fa7fae1f49cb 100644
Binary files a/docs/users/_build/doctrees/roles/production.doctree and b/docs/users/_build/doctrees/roles/production.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production/production_officers.doctree b/docs/users/_build/doctrees/roles/production/production_officers.doctree
index baf18017ca8fea70140e39046148316e1f9bf628..d3ad7f53754fb69ac36d7ecbaabee81f91248fd5 100644
Binary files a/docs/users/_build/doctrees/roles/production/production_officers.doctree and b/docs/users/_build/doctrees/roles/production/production_officers.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production/production_supervisors.doctree b/docs/users/_build/doctrees/roles/production/production_supervisors.doctree
index 3ab8fcacac1ffe1e9b54ef40e46ff7ed76b949b7..9753a40f67d56686555a73adac3015dcc2ad53c5 100644
Binary files a/docs/users/_build/doctrees/roles/production/production_supervisors.doctree and b/docs/users/_build/doctrees/roles/production/production_supervisors.doctree differ
diff --git a/docs/users/_build/json/environment.pickle b/docs/users/_build/json/environment.pickle
index f36a141abbf984fc962c8d776603592c761dae06..9bc8483761f10f56655e27f1e56548580c0aff2b 100644
Binary files a/docs/users/_build/json/environment.pickle and b/docs/users/_build/json/environment.pickle differ
diff --git a/docs/users/_build/json/genindex.fjson b/docs/users/_build/json/genindex.fjson
index 76611224c6855b37b782a39596f54cb859e52fb6..04bcfd228b350d03c7b577afee556319cb80387b 100644
--- a/docs/users/_build/json/genindex.fjson
+++ b/docs/users/_build/json/genindex.fjson
@@ -1 +1 @@
-{"genindexcounts": [], "customsidebar": null, "split_index": false, "alabaster_version": "0.7.10", "genindexentries": [], "current_page_name": "genindex", "sidebars": null}
\ No newline at end of file
+{"genindexcounts": [], "genindexentries": [], "alabaster_version": "0.7.10", "current_page_name": "genindex", "sidebars": null, "split_index": false, "customsidebar": null}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides.fjson b/docs/users/_build/json/guides.fjson
index 7a40597ea5c5c5f7bd3dfdb0c3466d2b9e343a35..b6ed3ec1f505f744b6119d69630e19901badab38 100644
--- a/docs/users/_build/json/guides.fjson
+++ b/docs/users/_build/json/guides.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/authors", "Authoring", "N", "next"], ["roles/production/production_officers", "Production Officers", "P", "previous"]], "body": "<div class=\"section\" id=\"guides\">\n<h1>Guides<a class=\"headerlink\" href=\"#guides\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"authors/\">Authoring</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"authors/#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"referees/\">Refereeing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/submissions_processing/\">Submission processing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/production/\">Production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/maintenance/\">Maintenance of SciPost Publications</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "sourcename": "guides.txt", "metatags": "", "meta": {}, "parents": [], "next": {"link": "authors/", "title": "Authoring"}, "customsidebar": null, "display_toc": false, "title": "Guides", "prev": {"link": "../roles/production/production_officers/", "title": "Production Officers"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Guides</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "authors/", "title": "Authoring"}, "prev": {"link": "../roles/production/production_officers/", "title": "Production Officers"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Guides</a></li>\n</ul>\n", "sourcename": "guides.txt", "current_page_name": "guides", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"guides\">\n<h1>Guides<a class=\"headerlink\" href=\"#guides\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"authors/\">Authoring</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"authors/#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"referees/\">Refereeing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/submissions_processing/\">Submission processing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/production/\">Production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/maintenance/\">Maintenance of SciPost Publications</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/authors", "Authoring", "N", "next"], ["roles/production/production_officers", "Production Officers", "P", "previous"]], "title": "Guides"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/authors.fjson b/docs/users/_build/json/guides/authors.fjson
index f9090fd8d77f6081e665b2cb78b6b7cf406e5c74..c123a28a96c83bdb1efbc5df3e9a0e3898f87df2 100644
--- a/docs/users/_build/json/guides/authors.fjson
+++ b/docs/users/_build/json/guides/authors.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/referees", "Refereeing", "N", "next"], ["guides", "Guides", "P", "previous"]], "body": "<div class=\"section\" id=\"authoring\">\n<h1>Authoring<a class=\"headerlink\" href=\"#authoring\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>authors</strong> of submissions and publications.</p>\n<div class=\"section\" id=\"preparing-your-manuscript\">\n<h2>Preparing your manuscript<a class=\"headerlink\" href=\"#preparing-your-manuscript\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "sourcename": "guides/authors.txt", "metatags": "", "meta": {}, "parents": [{"link": "../", "title": "Guides"}], "next": {"link": "../referees/", "title": "Refereeing"}, "customsidebar": null, "display_toc": true, "title": "Authoring", "prev": {"link": "../", "title": "Guides"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Authoring</a><ul>\n<li><a class=\"reference internal\" href=\"#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/authors", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../referees/", "title": "Refereeing"}, "prev": {"link": "../", "title": "Guides"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Authoring</a><ul>\n<li><a class=\"reference internal\" href=\"#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/authors.txt", "current_page_name": "guides/authors", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"authoring\">\n<h1>Authoring<a class=\"headerlink\" href=\"#authoring\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>authors</strong> of submissions and publications.</p>\n<div class=\"section\" id=\"preparing-your-manuscript\">\n<h2>Preparing your manuscript<a class=\"headerlink\" href=\"#preparing-your-manuscript\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/referees", "Refereeing", "N", "next"], ["guides", "Guides", "P", "previous"]], "title": "Authoring"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial.fjson b/docs/users/_build/json/guides/editorial.fjson
index 6f1a67b17d02cfc4708f07bf95b287347850450e..3030515451f7299872a506015fc74d09167c4492 100644
--- a/docs/users/_build/json/guides/editorial.fjson
+++ b/docs/users/_build/json/guides/editorial.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/submissions_processing", "Submission processing", "N", "next"], ["guides/referees", "Refereeing", "P", "previous"]], "body": "<div class=\"section\" id=\"editorial\">\n<h1>Editorial<a class=\"headerlink\" href=\"#editorial\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions_processing/\">Submission processing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#reception-phase\">Reception phase</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#pre-screening\">Pre-screening</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#during-refereeing\">During refereeing</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/initial_production/\">Initial Production of SciPost Publications</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/proofs/\">Proofs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/online_publication/\">Online Publication</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/#maintenance\">Maintenance</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "sourcename": "guides/editorial.txt", "metatags": "", "meta": {}, "parents": [{"link": "../", "title": "Guides"}], "next": {"link": "submissions_processing/", "title": "Submission processing"}, "customsidebar": null, "display_toc": false, "title": "Editorial", "prev": {"link": "../referees/", "title": "Refereeing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "submissions_processing/", "title": "Submission processing"}, "prev": {"link": "../referees/", "title": "Refereeing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial</a></li>\n</ul>\n", "sourcename": "guides/editorial.txt", "current_page_name": "guides/editorial", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial\">\n<h1>Editorial<a class=\"headerlink\" href=\"#editorial\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions_processing/\">Submission processing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#reception-phase\">Reception phase</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#pre-screening\">Pre-screening</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#during-refereeing\">During refereeing</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/initial_production/\">Initial Production of SciPost Publications</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/proofs/\">Proofs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/online_publication/\">Online Publication</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/#maintenance\">Maintenance</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/submissions_processing", "Submission processing", "N", "next"], ["guides/referees", "Refereeing", "P", "previous"]], "title": "Editorial"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/maintenance.fjson b/docs/users/_build/json/guides/editorial/maintenance.fjson
index ceaf298bef9b96c253406a388f8efe9891c566dd..474dbbd9602912f257d68450f8a0dfb1ecdebd4b 100644
--- a/docs/users/_build/json/guides/editorial/maintenance.fjson
+++ b/docs/users/_build/json/guides/editorial/maintenance.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "P", "previous"]], "body": "<div class=\"section\" id=\"maintenance-of-scipost-publications\">\n<h1>Maintenance of SciPost Publications<a class=\"headerlink\" href=\"#maintenance-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>.\nIt describes the post-publication maintenance of the published material.</p>\n<div class=\"section\" id=\"maintenance\">\n<h2>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"cited-by-updates\">\n<h3>Cited-by updates<a class=\"headerlink\" href=\"#cited-by-updates\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n</div>\n", "sourcename": "guides/editorial/maintenance.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "next": null, "customsidebar": null, "display_toc": true, "title": "Maintenance of SciPost Publications", "prev": {"link": "../production/online_publication/", "title": "Online Publication"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#maintenance\">Maintenance</a><ul>\n<li><a class=\"reference internal\" href=\"#cited-by-updates\">Cited-by updates</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/maintenance", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": null, "prev": {"link": "../production/online_publication/", "title": "Online Publication"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#maintenance\">Maintenance</a><ul>\n<li><a class=\"reference internal\" href=\"#cited-by-updates\">Cited-by updates</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/maintenance.txt", "current_page_name": "guides/editorial/maintenance", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"maintenance-of-scipost-publications\">\n<h1>Maintenance of SciPost Publications<a class=\"headerlink\" href=\"#maintenance-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>.\nIt describes the post-publication maintenance of the published material.</p>\n<div class=\"section\" id=\"maintenance\">\n<h2>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"cited-by-updates\">\n<h3>Cited-by updates<a class=\"headerlink\" href=\"#cited-by-updates\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "P", "previous"]], "title": "Maintenance of SciPost Publications"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production.fjson b/docs/users/_build/json/guides/editorial/production.fjson
index 86dd8aae91ad3614158e683dca4e09bcfeb87cba..bbca9488c68a10c9aa5135f1d6413bfb2b5a6946 100644
--- a/docs/users/_build/json/guides/editorial/production.fjson
+++ b/docs/users/_build/json/guides/editorial/production.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "N", "next"], ["guides/editorial/submissions_processing", "Submission processing", "P", "previous"]], "body": "<div class=\"section\" id=\"production\">\n<h1>Production<a class=\"headerlink\" href=\"#production\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"initial_production/\">Initial Production of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#formatting-check\">Formatting check</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#latex-file-preparation\">LaTeX file preparation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"proofs/\">Proofs</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"proofs/#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"online_publication/\">Online Publication</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#finalization-of-manuscript-production\">Finalization of manuscript production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "sourcename": "guides/editorial/production.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "next": {"link": "initial_production/", "title": "Initial Production of SciPost Publications"}, "customsidebar": null, "display_toc": false, "title": "Production", "prev": {"link": "../submissions_processing/", "title": "Submission processing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/production", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "initial_production/", "title": "Initial Production of SciPost Publications"}, "prev": {"link": "../submissions_processing/", "title": "Submission processing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production</a></li>\n</ul>\n", "sourcename": "guides/editorial/production.txt", "current_page_name": "guides/editorial/production", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production\">\n<h1>Production<a class=\"headerlink\" href=\"#production\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"initial_production/\">Initial Production of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#formatting-check\">Formatting check</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#latex-file-preparation\">LaTeX file preparation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"proofs/\">Proofs</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"proofs/#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"online_publication/\">Online Publication</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#finalization-of-manuscript-production\">Finalization of manuscript production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "N", "next"], ["guides/editorial/submissions_processing", "Submission processing", "P", "previous"]], "title": "Production"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/initial_production.fjson b/docs/users/_build/json/guides/editorial/production/initial_production.fjson
index 62a83e26ae028426cb5fcfc87625ee9f61e01f64..8a47dc5a06562dced66d9388df4eecb8cfa8b12e 100644
--- a/docs/users/_build/json/guides/editorial/production/initial_production.fjson
+++ b/docs/users/_build/json/guides/editorial/production/initial_production.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/proofs", "Proofs", "N", "next"], ["guides/editorial/production", "Production", "P", "previous"]], "body": "<div class=\"section\" id=\"initial-production-of-scipost-publications\">\n<span id=\"initial-production\"></span><h1>Initial Production of SciPost Publications<a class=\"headerlink\" href=\"#initial-production-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>, <strong>Production Supervisors</strong> and <strong>Production Officers</strong>. It describes the post-acceptance workflow from paper acceptance to publication.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"formatting-check\">\n<h2>Formatting check<a class=\"headerlink\" href=\"#formatting-check\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be emailed and asked to provide them,\nby sending in either an updated <code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file or <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> source.</p>\n<p>Any extra material provided by the authors which supplements\nthe arXiv source should be put in a folder <code class=\"docutils literal\"><span class=\"pre\">EXTRA_FROM_AUTH</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"source-retrieval-and-folder-preparation\">\n<h2>Source retrieval and folder preparation<a class=\"headerlink\" href=\"#source-retrieval-and-folder-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">On the SciPost server, navigate to folder\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/IN_PRODUCTION</span></code>.</p>\n</li>\n<li><p class=\"first\">Create a folder\n<code class=\"docutils literal\"><span class=\"pre\">[journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_[arxiv</span> <span class=\"pre\">identifier]_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name]</span></code>,\ne.g. <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1604.98141v3_Smart</span></code>.</p>\n</li>\n<li><p class=\"first\">Save the source from arXiv into this folder.</p>\n</li>\n<li><p class=\"first\">NOTE: the file will be named <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>, which is not recognized\nas a <code class=\"docutils literal\"><span class=\"pre\">.tar.gz</span></code> file on a UNIX system. Rename the file\n<code class=\"docutils literal\"><span class=\"pre\">####.####v#.tar.gz</span></code>. Unzip it to produce the folder <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>.\nIf this produces another tar file, it is because the submission consists of\na single <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file; you should then rename this to <code class=\"docutils literal\"><span class=\"pre\">####.#####v#.tex</span></code>.</p>\n</li>\n<li><p class=\"first\">Copy the paper\u2019s sources one level down (so from <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code> to\nthe current directory). BE CAREFUL: if the authors have included any of\nthe SciPost style files (<code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code>, <code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code>), DO NOT\ncopy those down. You can skip this step if the previous step immediately led\nto a <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</p>\n</li>\n<li><p class=\"first\">Copy the files in\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/v##_production/FILES_TO_COPY_IN_PAPER_DIR</span></code>\nto the current directory. There are 5 files:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><code class=\"docutils literal\"><span class=\"pre\">by.eps</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">logo_scipost_with_bgd.pdf</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_[Phys,</span> <span class=\"pre\">or</span> <span class=\"pre\">other</span> <span class=\"pre\">as</span> <span class=\"pre\">appropriate]_Skeleton.tex</span></code></li>\n</ul>\n</div></blockquote>\n</li>\n<li><p class=\"first\">Copy the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source to a new file using the name convention\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_####_#####v#_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name].tex</span></code>\n(careful: use underscore instead of . between numbers).</p>\n</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"latex-file-preparation\">\n<h2>LaTeX file preparation<a class=\"headerlink\" href=\"#latex-file-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>The next step is to transfer the submission&#8217;s LaTeX contents into the final file.</p>\n<p>All steps involed appear in the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source in the form <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> opening marked, followed by a corresponding <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">END</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> marker.</p>\n<p>The easiest way to proceed is to copy and paste material from the authors&#8217; <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code>\nsource directly into the (appropriately renamed as per the instructions above)\nskeleton file.</p>\n<p>During the file preparation, if there is anything worth noting about the\nproduction process, please include this in the:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n<span class=\"o\">%</span> <span class=\"n\">Production</span> <span class=\"n\">Notes</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">name</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">notes</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n</pre></div>\n</div>\n<p>block at the beginning of the document, just before the <code class=\"docutils literal\"><span class=\"pre\">\\documentclass</span></code> declaration.</p>\n<p>As the person running the production, please identify yourself by writing\nyour initials and surname in this block.</p>\n</div></blockquote>\n<div class=\"section\" id=\"general-latex-tips\">\n<h3>General LaTeX tips<a class=\"headerlink\" href=\"#general-latex-tips\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">Prefer the <code class=\"docutils literal\"><span class=\"pre\">align</span></code> (from package <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code>) environment to <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code>.\nFor a technical discussion, see <em>e.g.</em> <a class=\"reference external\" href=\"http://tug.org/TUGboat/tb33-1/tb103madsen.pdf\">this link</a>.</p>\n<p>You do <strong>not</strong> have to systematically replace all <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code> with <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.\nHowever, if you do reformat some equations, do shift to <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"step-by-step-procedure\">\n<h3>Step-by-step procedure<a class=\"headerlink\" href=\"#step-by-step-procedure\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">TODO: PAPER CITATION</p>\n<p>In this place, fill the missing numbers in the citation header:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\rhead{\\small \\href{https://scipost.org/SciPostPhys.?.?.???}{SciPost Phys. ?, ??? (20??)}}\n</pre></div>\n</div>\n<p>The first argument of the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> is the simple permanent URL for the publication. This includes 3 numbers: the volume number, issue, and three-digit paper number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.1.2.011</span></code>. Verify the appropriate issue number (this will be verified later by an EdAdmin). At this stage, leave the paper number to <code class=\"docutils literal\"><span class=\"pre\">???</span></code>: this number will be assigned and filled in in the last stage of production.</p>\n<p>The second argument to the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> uses the simple citation, dropping the issue number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.</span> <span class=\"pre\">1,</span> <span class=\"pre\">011</span> <span class=\"pre\">(2016)</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: PACKAGES</p>\n<p>The <code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code> (v1b) class definition requires the following packages:</p>\n<ul class=\"simple\">\n<li>amsmath [NOTE: amssymb is redundant and clashes with mathdesign]</li>\n<li>cite</li>\n<li>doi</li>\n<li>fancyhdr</li>\n<li>geometry</li>\n<li>graphicx</li>\n<li>hyperref</li>\n<li>inputenc</li>\n<li>lineno [for proofs only]</li>\n<li>titlesec</li>\n<li>tocloft, nottoc,notlot,notlof</li>\n<li>xcolor</li>\n</ul>\n<p>If the authors are using extra packages not already in the list above,\nyou should paste their list within this TODO block.</p>\n<p>Any package originally included by the authors which you do <strong>not</strong>\ninclude should be commented out with a  <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">REMOVED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PROD</span></code>\ncomments prepended.</p>\n<p>Any package which is added during production should be listed after\nthe <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">ADDED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PRODUCTION</span></code> marker.</p>\n</li>\n<li><p class=\"first\">TODO: COMMANDS</p>\n<p>If the authors have redefined commands, paste the redefinitions in this block.</p>\n<p>Discard (namely: do not copy and paste) any length (and similar) redefinitions.</p>\n</li>\n<li><p class=\"first\">TODO: TITLE</p>\n<p>The title is enclosed in:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begin</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}{</span>\\<span class=\"n\">Large</span> \\<span class=\"n\">textbf</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span>\n<span class=\"p\">[</span><span class=\"n\">title</span><span class=\"p\">]</span>\n<span class=\"p\">}}}</span>\\<span class=\"n\">end</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>Paste the title in this block. End the title with <code class=\"docutils literal\"><span class=\"pre\">\\\\</span></code>\nin order to ensure proper uniform spacing between the lines.</p>\n</li>\n<li><p class=\"first\">TODO: AUTHORS</p>\n<p>Author names should be in format <code class=\"docutils literal\"><span class=\"pre\">firstname</span> <span class=\"pre\">lastname</span></code>, e.g. <code class=\"docutils literal\"><span class=\"pre\">John</span> <span class=\"pre\">Smith</span></code>,\nand should be in textbf. No <code class=\"docutils literal\"><span class=\"pre\">comma</span></code> but rather an <code class=\"docutils literal\"><span class=\"pre\">and</span></code> before\nthe last author. If multiple authors and affiliations, use <code class=\"docutils literal\"><span class=\"pre\">\\textsuperscript</span></code>\nand positive integer labels, with a <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> for the corresponding author.\nIf multiple email addresses are given, reference them with <code class=\"docutils literal\"><span class=\"pre\">$\\dagger$,</span> <span class=\"pre\">...</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: AFFILIATIONS</p>\n<p>If there are many affiliations, each is prepended by the appropriate\n<code class=\"docutils literal\"><span class=\"pre\">{\\bf</span> <span class=\"pre\">[nr]}</span></code>. Separate affiliations with double-backslash.</p>\n<p>Put a <code class=\"docutils literal\"><span class=\"pre\">\\\\[\\baselineskip]</span></code> after the affiliations.</p>\n</li>\n<li><p class=\"first\">TODO: EMAIL (OPTION)</p>\n<p>Optionally, provide the email of the corresponding author using:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>``\\href{mailto:[email]}{\\small \\sf [email]}``\n</pre></div>\n</div>\n<p>prepended with <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> if corresponding author. If no email is to be given,\ncomment out the <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span> <span class=\"pre\">\\href{mailto:[email]}{\\small</span> <span class=\"pre\">\\sf</span> <span class=\"pre\">[email]}</span></code> line.</p>\n<p>If a web link is offered, use the format <code class=\"docutils literal\"><span class=\"pre\">{\\small</span> <span class=\"pre\">\\url{[url]}}</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: ABSTRACT</p>\n<p>Paste the abstract in the provided block:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">section</span><span class=\"o\">*</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span><span class=\"n\">Abstract</span><span class=\"p\">}}</span>\n<span class=\"p\">{</span>\\<span class=\"n\">bf</span>\n<span class=\"p\">[</span><span class=\"n\">abstract</span><span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">TODO: TOC</p>\n<p>As a general guideline, the paper should contain a table of contents\nif it has more than 6 pages.</p>\n<p>If a TOC should be included, leave the skeleton as it is. If no TOC\nshould be there, simply comment out the 2nd and 3rd lines of:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>explicitly leaving:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>If a single horizontal line is pushed to the next page, correct by\nplaying with negatime <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: COPYRIGHT</p>\n<p>Include the first author&#8217;s initials and family name in the copyright\nstatement. If there are just two authors: give both authors&#8217; initials\nand last names. If there are more than two authors, use the format\n<code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee</span> <span class=\"pre\">{\\it</span> <span class=\"pre\">et</span> <span class=\"pre\">al.}</span></code>. Be respectful of any special (non-latin)\ncharacters in authors&#8217; names.</p>\n</li>\n<li><p class=\"first\">TODO: DATES</p>\n<p>Fill in the appropriate received and accepted dates in\nformat <code class=\"docutils literal\"><span class=\"pre\">DD-MM-YYYY</span></code>. Be careful to use the correct submission data,\nnamely that of the original submission.</p>\n<p>The accepted and published dates will be filled in later on.</p>\n</li>\n<li><p class=\"first\">TODO: DOI</p>\n<p>Provide the volume and issue numbers (two places) in the DOI specifier.\nThe paper number will be assigned in the final stage of production.</p>\n</li>\n<li><p class=\"first\">TODO: LINENO</p>\n<p>During proofs stage, make sure line numbers are activated (they should\nbe by default).</p>\n</li>\n<li><p class=\"first\">TODO: CONTENTS</p>\n<p>Paste the entire bulk of the paper in this block,\nincluding all sections and eventual appendices.\nCheck that there are no appendices after the references in the\noriginal tex file.</p>\n</li>\n<li><p class=\"first\">TODO: BIBNR</p>\n<p>If the bibliography contains more than 100 entries, use\n<code class=\"docutils literal\"><span class=\"pre\">999</span></code> instead of <code class=\"docutils literal\"><span class=\"pre\">99</span></code> in the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliotraphy}{[nr]}</span></code>\nstatement.</p>\n</li>\n<li><p class=\"first\">TODO: BBL</p>\n<p>The references are explicitly pasted into this block.</p>\n<p>If using BiBTeX, use a <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> command,\nand comment out the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliography}</span></code> and <code class=\"docutils literal\"><span class=\"pre\">\\end{thebibliography}</span></code>\ncommands. After running BiBTeX, the contents of the generated\n<code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> file should be pasted in the uncommented <code class=\"docutils literal\"><span class=\"pre\">\\begin,\\end{thebibliography}</span></code>\nblock, and the <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> should be commented out.</p>\n<p><em>Note: the reason to not use BiBTeX from now on is to easy in-file\ncorrection of improperly formatted references (instead of having to correct\nthe ``.bib`` file)</em>.</p>\n</li>\n</ol>\n<p><strong>You are now ready to typeset the ``.tex`` file</strong>. Simple issues are listed\nbelow. If you encounter further problems, see the <strong>Problems</strong> list below.</p>\n<p>If you need to run BiBTeX for the references, do so (remembering to do it\nat least twice so the references appear), and then paste the contents of the\n<code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file in the <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">REFERENCES</span></code> block. <strong>Make sure you use the\ncorrect</strong> <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> <strong>file</strong>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"simple-issues\">\n<h3>Simple issues<a class=\"headerlink\" href=\"#simple-issues\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\"><em>LaTeX Error: environment acknowledgements undefined</em> or\n<em>Undefined control sequence acknowledgements</em></p>\n<p>The users have used ReVTeX; simply change the <code class=\"docutils literal\"><span class=\"pre\">\\begin{acknowledgements}</span></code>\nor <code class=\"docutils literal\"><span class=\"pre\">\\acknowledgements</span></code>\nto <code class=\"docutils literal\"><span class=\"pre\">\\section*{Acknowledgements}</span></code> (of course also removing any eventual\n<code class=\"docutils literal\"><span class=\"pre\">\\end{acknowledgements}</span></code>).</p>\n</li>\n<li><p class=\"first\"><em>LaTeX Error: Environment widetext undefined.</em></p>\n<p>The authors have used ReVTeX; simply comment out all <code class=\"docutils literal\"><span class=\"pre\">\\begin{widetext}</span></code>\nand <code class=\"docutils literal\"><span class=\"pre\">\\end{widetext}</span></code> markers.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"problems\">\n<h3>Problems<a class=\"headerlink\" href=\"#problems\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">lineno</span></code> and <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code> are incompatible</p>\n<p>Problem: line numbers don&#8217;t appear when paragraph is followed by align etc.</p>\n<p>Solution: [from <a class=\"reference external\" href=\"http://phaseportrait.blogspot.nl/2007/08/lineno-and-amsmath-compatibility.html\">this link</a>]: paste this in the preamble:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%</span> <span class=\"n\">Patch</span> <span class=\"n\">lineno</span> <span class=\"n\">when</span> <span class=\"n\">used</span> <span class=\"k\">with</span> <span class=\"n\">amsmath</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname #1\\endcsname</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname end#1\\endcsname</span>\n\\<span class=\"n\">renewenvironment</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">linenomath</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\endcsname}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\endcsname\\endlinenomath}}%</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1*}}%</span>\n\\<span class=\"n\">AtBeginDocument</span><span class=\"p\">{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">equation</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">align</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">flalign</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">alignat</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">gather</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">multline</span><span class=\"p\">}</span><span class=\"o\">%</span>\n<span class=\"p\">}</span>\n<span class=\"o\">%%</span> <span class=\"n\">End</span> <span class=\"n\">patch</span> <span class=\"n\">lineno</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Breaking of in-line math equations</p>\n<p>Simply prevent by forcing equations into a math atom by surrouding them with braces,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>Here is an equation that should not be broken: ${E=mc^2}$.\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Equation/table or other text/maths element is just too wide.\nOption: locally change the fontsize by embedding the object in a <code class=\"docutils literal\"><span class=\"pre\">\\fontsize</span></code> block,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begingroup</span>\n\\<span class=\"n\">fontsize</span><span class=\"p\">{</span><span class=\"n\">new</span> <span class=\"n\">font</span> <span class=\"n\">size</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">g</span><span class=\"o\">.</span> <span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}{</span><span class=\"n\">skip</span><span class=\"p\">,</span> <span class=\"mi\">120</span><span class=\"o\">%</span> <span class=\"n\">of</span> <span class=\"n\">previous</span><span class=\"p\">}</span>\\<span class=\"n\">selectfont</span>\n<span class=\"p\">[</span> <span class=\"n\">element</span><span class=\"p\">]</span>\n\\<span class=\"n\">endgroup</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">MnSymbol</span></code> is problematic and clashes with amsmath.</p>\n<p>One solution is to import individual symbols according to these\n<a class=\"reference external\" href=\"http://tex.stackexchange.com/questions/36006/importing-single-symbol-from-mnsymbol\">instructions</a>.</p>\n</li>\n<li><p class=\"first\">Equations spacing in <code class=\"docutils literal\"><span class=\"pre\">align</span></code> environment is too tight.</p>\n<p>The simple solution is to include a spacing specifier of the form <code class=\"docutils literal\"><span class=\"pre\">\\nonumber</span> <span class=\"pre\">\\\\[5pt]</span></code>,\nwhere <code class=\"docutils literal\"><span class=\"pre\">5pt</span></code> is a good compromise.</p>\n<p>This spacing can also be set globally by including <code class=\"docutils literal\"><span class=\"pre\">\\setlength{\\jot}{5pt}</span></code> before the\n<code class=\"docutils literal\"><span class=\"pre\">\\begin{document}</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"references-formatting\">\n<h3>References formatting<a class=\"headerlink\" href=\"#references-formatting\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>References should be in the following format:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Author names are in comma-separated list (except for the last author,\nwith no comma and an <em>and</em>) with format [initials] [last name].</li>\n<li>Titles are in italics, and capitalization is displayed (using <em>e.g.</em> {{ [title] }} in BiBTeX). For PRL: nouns capitalized.</li>\n<li>Journal names are abbreviated. A useful resource is this <a class=\"reference external\" href=\"http://www.efm.leeds.ac.uk/~mark/ISIabbr/A_abrvjt.html\">list of journal abbreviations</a>.</li>\n<li>Volume number is in bold.</li>\n<li>Issue number can be left out; if included, in parentheses after volume nr.</li>\n<li>Year is in parentheses.</li>\n<li>Commas separate all elements.</li>\n<li>All doi are present and displayed in format doi:[doi]. Note that the doi does\n<em>not</em> include any <code class=\"docutils literal\"><span class=\"pre\">http://doi.org</span></code> or similar URL prefix. Instead, it should\nbe of the form <code class=\"docutils literal\"><span class=\"pre\">10.###[...]/[...]</span></code>.</li>\n<li>The reference is closed by a <code class=\"docutils literal\"><span class=\"pre\">.</span></code></li>\n</ul>\n<p>For arXiv entries, verify if the paper has been published in the meantime.\nIf so, replace this reference with its proper citation.\nIf not, use the format <code class=\"docutils literal\"><span class=\"pre\">\\href{https://arxiv.org/abs/####.#####}{arXiv:####.#####}</span></code>,\nand remove any <code class=\"docutils literal\"><span class=\"pre\">(YEAR)</span></code>.</p>\n<p>J. Stat. Mech. and JHEP are annoying (because the volume number is the year).\nManually remove volume nr for these, so the format becomes <code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee,</span> <span class=\"pre\">\\emp{Bee's</span> <span class=\"pre\">nice</span> <span class=\"pre\">paper},</span> <span class=\"pre\">J.</span> <span class=\"pre\">Stat.</span> <span class=\"pre\">Mech.:</span> <span class=\"pre\">Th.</span> <span class=\"pre\">Exp.</span> <span class=\"pre\">[P,L]#####</span> <span class=\"pre\">(20##),</span> <span class=\"pre\">\\doi{10...}.</span></code></p>\n<p>J. Phys. A is also annoying. Up to and including volume 39 (2006), it&#8217;s\nJ. Phys. A: Math. Gen. Afterwards, volume 40 (2007) onwards, it&#8217;s\nJ. Phys. A: Math. Theor.</p>\n<p>Entries in the bibliography which are not references but footnotes,\nshould be formatted as such in the main text (using <code class=\"docutils literal\"><span class=\"pre\">\\footnote{}</span></code>).</p>\n<p>Check that all DOIs work. Remove the <code class=\"docutils literal\"><span class=\"pre\">\\meta</span></code> at the end of the bibitem\nif it is present.</p>\n</div></blockquote>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"layout-verification\">\n<h3>Layout verification<a class=\"headerlink\" href=\"#layout-verification\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>The whole paper should be scanned through, and the layout of equations\nand figures should be checked and corrected if necessary.</p>\n<p>In particular, the punctuation of equations should be checked and corrected\nif necessary.</p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "sourcename": "guides/editorial/production/initial_production.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "next": {"link": "../proofs/", "title": "Proofs"}, "customsidebar": null, "display_toc": true, "title": "Initial Production of SciPost Publications", "prev": {"link": "../", "title": "Production"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Initial Production of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#formatting-check\">Formatting check</a></li>\n<li><a class=\"reference internal\" href=\"#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li><a class=\"reference internal\" href=\"#latex-file-preparation\">LaTeX file preparation</a><ul>\n<li><a class=\"reference internal\" href=\"#general-latex-tips\">General LaTeX tips</a></li>\n<li><a class=\"reference internal\" href=\"#step-by-step-procedure\">Step-by-step procedure</a></li>\n<li><a class=\"reference internal\" href=\"#simple-issues\">Simple issues</a></li>\n<li><a class=\"reference internal\" href=\"#problems\">Problems</a></li>\n<li><a class=\"reference internal\" href=\"#references-formatting\">References formatting</a></li>\n<li><a class=\"reference internal\" href=\"#layout-verification\">Layout verification</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/production/initial_production", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../proofs/", "title": "Proofs"}, "prev": {"link": "../", "title": "Production"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Initial Production of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#formatting-check\">Formatting check</a></li>\n<li><a class=\"reference internal\" href=\"#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li><a class=\"reference internal\" href=\"#latex-file-preparation\">LaTeX file preparation</a><ul>\n<li><a class=\"reference internal\" href=\"#general-latex-tips\">General LaTeX tips</a></li>\n<li><a class=\"reference internal\" href=\"#step-by-step-procedure\">Step-by-step procedure</a></li>\n<li><a class=\"reference internal\" href=\"#simple-issues\">Simple issues</a></li>\n<li><a class=\"reference internal\" href=\"#problems\">Problems</a></li>\n<li><a class=\"reference internal\" href=\"#references-formatting\">References formatting</a></li>\n<li><a class=\"reference internal\" href=\"#layout-verification\">Layout verification</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/initial_production.txt", "current_page_name": "guides/editorial/production/initial_production", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"initial-production-of-scipost-publications\">\n<span id=\"initial-production\"></span><h1>Initial Production of SciPost Publications<a class=\"headerlink\" href=\"#initial-production-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>, <strong>Production Supervisors</strong> and <strong>Production Officers</strong>. It describes the post-acceptance workflow from paper acceptance to publication.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"formatting-check\">\n<h2>Formatting check<a class=\"headerlink\" href=\"#formatting-check\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be emailed and asked to provide them,\nby sending in either an updated <code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file or <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> source.</p>\n<p>Any extra material provided by the authors which supplements\nthe arXiv source should be put in a folder <code class=\"docutils literal\"><span class=\"pre\">EXTRA_FROM_AUTH</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"source-retrieval-and-folder-preparation\">\n<h2>Source retrieval and folder preparation<a class=\"headerlink\" href=\"#source-retrieval-and-folder-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">On the SciPost server, navigate to folder\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/IN_PRODUCTION</span></code>.</p>\n</li>\n<li><p class=\"first\">Create a folder\n<code class=\"docutils literal\"><span class=\"pre\">[journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_[arxiv</span> <span class=\"pre\">identifier]_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name]</span></code>,\ne.g. <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1604.98141v3_Smart</span></code>.</p>\n</li>\n<li><p class=\"first\">Save the source from arXiv into this folder.</p>\n</li>\n<li><p class=\"first\">NOTE: the file will be named <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>, which is not recognized\nas a <code class=\"docutils literal\"><span class=\"pre\">.tar.gz</span></code> file on a UNIX system. Rename the file\n<code class=\"docutils literal\"><span class=\"pre\">####.####v#.tar.gz</span></code>. Unzip it to produce the folder <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>.\nIf this produces another tar file, it is because the submission consists of\na single <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file; you should then rename this to <code class=\"docutils literal\"><span class=\"pre\">####.#####v#.tex</span></code>.</p>\n</li>\n<li><p class=\"first\">Copy the paper\u2019s sources one level down (so from <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code> to\nthe current directory). BE CAREFUL: if the authors have included any of\nthe SciPost style files (<code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code>, <code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code>), DO NOT\ncopy those down. You can skip this step if the previous step immediately led\nto a <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</p>\n</li>\n<li><p class=\"first\">Copy the files in\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/v##_production/FILES_TO_COPY_IN_PAPER_DIR</span></code>\nto the current directory. There are 5 files:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><code class=\"docutils literal\"><span class=\"pre\">by.eps</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">logo_scipost_with_bgd.pdf</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_[Phys,</span> <span class=\"pre\">or</span> <span class=\"pre\">other</span> <span class=\"pre\">as</span> <span class=\"pre\">appropriate]_Skeleton.tex</span></code></li>\n</ul>\n</div></blockquote>\n</li>\n<li><p class=\"first\">Copy the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source to a new file using the name convention\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_####_#####v#_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name].tex</span></code>\n(careful: use underscore instead of . between numbers).</p>\n</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"latex-file-preparation\">\n<h2>LaTeX file preparation<a class=\"headerlink\" href=\"#latex-file-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>The next step is to transfer the submission&#8217;s LaTeX contents into the final file.</p>\n<p>All steps involed appear in the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source in the form <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> opening marked, followed by a corresponding <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">END</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> marker.</p>\n<p>The easiest way to proceed is to copy and paste material from the authors&#8217; <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code>\nsource directly into the (appropriately renamed as per the instructions above)\nskeleton file.</p>\n<p>During the file preparation, if there is anything worth noting about the\nproduction process, please include this in the:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n<span class=\"o\">%</span> <span class=\"n\">Production</span> <span class=\"n\">Notes</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">name</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">notes</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n</pre></div>\n</div>\n<p>block at the beginning of the document, just before the <code class=\"docutils literal\"><span class=\"pre\">\\documentclass</span></code> declaration.</p>\n<p>As the person running the production, please identify yourself by writing\nyour initials and surname in this block.</p>\n</div></blockquote>\n<div class=\"section\" id=\"general-latex-tips\">\n<h3>General LaTeX tips<a class=\"headerlink\" href=\"#general-latex-tips\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">Prefer the <code class=\"docutils literal\"><span class=\"pre\">align</span></code> (from package <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code>) environment to <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code>.\nFor a technical discussion, see <em>e.g.</em> <a class=\"reference external\" href=\"http://tug.org/TUGboat/tb33-1/tb103madsen.pdf\">this link</a>.</p>\n<p>You do <strong>not</strong> have to systematically replace all <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code> with <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.\nHowever, if you do reformat some equations, do shift to <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"step-by-step-procedure\">\n<h3>Step-by-step procedure<a class=\"headerlink\" href=\"#step-by-step-procedure\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">TODO: PAPER CITATION</p>\n<p>In this place, fill the missing numbers in the citation header:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\rhead{\\small \\href{https://scipost.org/SciPostPhys.?.?.???}{SciPost Phys. ?, ??? (20??)}}\n</pre></div>\n</div>\n<p>The first argument of the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> is the simple permanent URL for the publication. This includes 3 numbers: the volume number, issue, and three-digit paper number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.1.2.011</span></code>. Verify the appropriate issue number (this will be verified later by an EdAdmin). At this stage, leave the paper number to <code class=\"docutils literal\"><span class=\"pre\">???</span></code>: this number will be assigned and filled in in the last stage of production.</p>\n<p>The second argument to the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> uses the simple citation, dropping the issue number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.</span> <span class=\"pre\">1,</span> <span class=\"pre\">011</span> <span class=\"pre\">(2016)</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: PACKAGES</p>\n<p>The <code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code> (v1b) class definition requires the following packages:</p>\n<ul class=\"simple\">\n<li>amsmath [NOTE: amssymb is redundant and clashes with mathdesign]</li>\n<li>cite</li>\n<li>doi</li>\n<li>fancyhdr</li>\n<li>geometry</li>\n<li>graphicx</li>\n<li>hyperref</li>\n<li>inputenc</li>\n<li>lineno [for proofs only]</li>\n<li>titlesec</li>\n<li>tocloft, nottoc,notlot,notlof</li>\n<li>xcolor</li>\n</ul>\n<p>If the authors are using extra packages not already in the list above,\nyou should paste their list within this TODO block.</p>\n<p>Any package originally included by the authors which you do <strong>not</strong>\ninclude should be commented out with a  <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">REMOVED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PROD</span></code>\ncomments prepended.</p>\n<p>Any package which is added during production should be listed after\nthe <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">ADDED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PRODUCTION</span></code> marker.</p>\n</li>\n<li><p class=\"first\">TODO: COMMANDS</p>\n<p>If the authors have redefined commands, paste the redefinitions in this block.</p>\n<p>Discard (namely: do not copy and paste) any length (and similar) redefinitions.</p>\n</li>\n<li><p class=\"first\">TODO: TITLE</p>\n<p>The title is enclosed in:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begin</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}{</span>\\<span class=\"n\">Large</span> \\<span class=\"n\">textbf</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span>\n<span class=\"p\">[</span><span class=\"n\">title</span><span class=\"p\">]</span>\n<span class=\"p\">}}}</span>\\<span class=\"n\">end</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>Paste the title in this block. End the title with <code class=\"docutils literal\"><span class=\"pre\">\\\\</span></code>\nin order to ensure proper uniform spacing between the lines.</p>\n</li>\n<li><p class=\"first\">TODO: AUTHORS</p>\n<p>Author names should be in format <code class=\"docutils literal\"><span class=\"pre\">firstname</span> <span class=\"pre\">lastname</span></code>, e.g. <code class=\"docutils literal\"><span class=\"pre\">John</span> <span class=\"pre\">Smith</span></code>,\nand should be in textbf. No <code class=\"docutils literal\"><span class=\"pre\">comma</span></code> but rather an <code class=\"docutils literal\"><span class=\"pre\">and</span></code> before\nthe last author. If multiple authors and affiliations, use <code class=\"docutils literal\"><span class=\"pre\">\\textsuperscript</span></code>\nand positive integer labels, with a <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> for the corresponding author.\nIf multiple email addresses are given, reference them with <code class=\"docutils literal\"><span class=\"pre\">$\\dagger$,</span> <span class=\"pre\">...</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: AFFILIATIONS</p>\n<p>If there are many affiliations, each is prepended by the appropriate\n<code class=\"docutils literal\"><span class=\"pre\">{\\bf</span> <span class=\"pre\">[nr]}</span></code>. Separate affiliations with double-backslash.</p>\n<p>Put a <code class=\"docutils literal\"><span class=\"pre\">\\\\[\\baselineskip]</span></code> after the affiliations.</p>\n</li>\n<li><p class=\"first\">TODO: EMAIL (OPTION)</p>\n<p>Optionally, provide the email of the corresponding author using:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>``\\href{mailto:[email]}{\\small \\sf [email]}``\n</pre></div>\n</div>\n<p>prepended with <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> if corresponding author. If no email is to be given,\ncomment out the <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span> <span class=\"pre\">\\href{mailto:[email]}{\\small</span> <span class=\"pre\">\\sf</span> <span class=\"pre\">[email]}</span></code> line.</p>\n<p>If a web link is offered, use the format <code class=\"docutils literal\"><span class=\"pre\">{\\small</span> <span class=\"pre\">\\url{[url]}}</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: ABSTRACT</p>\n<p>Paste the abstract in the provided block:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">section</span><span class=\"o\">*</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span><span class=\"n\">Abstract</span><span class=\"p\">}}</span>\n<span class=\"p\">{</span>\\<span class=\"n\">bf</span>\n<span class=\"p\">[</span><span class=\"n\">abstract</span><span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">TODO: TOC</p>\n<p>As a general guideline, the paper should contain a table of contents\nif it has more than 6 pages.</p>\n<p>If a TOC should be included, leave the skeleton as it is. If no TOC\nshould be there, simply comment out the 2nd and 3rd lines of:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>explicitly leaving:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>If a single horizontal line is pushed to the next page, correct by\nplaying with negatime <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: COPYRIGHT</p>\n<p>Include the first author&#8217;s initials and family name in the copyright\nstatement. If there are just two authors: give both authors&#8217; initials\nand last names. If there are more than two authors, use the format\n<code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee</span> <span class=\"pre\">{\\it</span> <span class=\"pre\">et</span> <span class=\"pre\">al.}</span></code>. Be respectful of any special (non-latin)\ncharacters in authors&#8217; names.</p>\n</li>\n<li><p class=\"first\">TODO: DATES</p>\n<p>Fill in the appropriate received and accepted dates in\nformat <code class=\"docutils literal\"><span class=\"pre\">DD-MM-YYYY</span></code>. Be careful to use the correct submission data,\nnamely that of the original submission.</p>\n<p>The accepted and published dates will be filled in later on.</p>\n</li>\n<li><p class=\"first\">TODO: DOI</p>\n<p>Provide the volume and issue numbers (two places) in the DOI specifier.\nThe paper number will be assigned in the final stage of production.</p>\n</li>\n<li><p class=\"first\">TODO: LINENO</p>\n<p>During proofs stage, make sure line numbers are activated (they should\nbe by default).</p>\n</li>\n<li><p class=\"first\">TODO: CONTENTS</p>\n<p>Paste the entire bulk of the paper in this block,\nincluding all sections and eventual appendices.\nCheck that there are no appendices after the references in the\noriginal tex file.</p>\n</li>\n<li><p class=\"first\">TODO: BIBNR</p>\n<p>If the bibliography contains more than 100 entries, use\n<code class=\"docutils literal\"><span class=\"pre\">999</span></code> instead of <code class=\"docutils literal\"><span class=\"pre\">99</span></code> in the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliotraphy}{[nr]}</span></code>\nstatement.</p>\n</li>\n<li><p class=\"first\">TODO: BBL</p>\n<p>The references are explicitly pasted into this block.</p>\n<p>If using BiBTeX, use a <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> command,\nand comment out the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliography}</span></code> and <code class=\"docutils literal\"><span class=\"pre\">\\end{thebibliography}</span></code>\ncommands. After running BiBTeX, the contents of the generated\n<code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> file should be pasted in the uncommented <code class=\"docutils literal\"><span class=\"pre\">\\begin,\\end{thebibliography}</span></code>\nblock, and the <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> should be commented out.</p>\n<p><em>Note: the reason to not use BiBTeX from now on is to easy in-file\ncorrection of improperly formatted references (instead of having to correct\nthe ``.bib`` file)</em>.</p>\n</li>\n</ol>\n<p><strong>You are now ready to typeset the ``.tex`` file</strong>. Simple issues are listed\nbelow. If you encounter further problems, see the <strong>Problems</strong> list below.</p>\n<p>If you need to run BiBTeX for the references, do so (remembering to do it\nat least twice so the references appear), and then paste the contents of the\n<code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file in the <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">REFERENCES</span></code> block. <strong>Make sure you use the\ncorrect</strong> <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> <strong>file</strong>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"simple-issues\">\n<h3>Simple issues<a class=\"headerlink\" href=\"#simple-issues\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\"><em>LaTeX Error: environment acknowledgements undefined</em> or\n<em>Undefined control sequence acknowledgements</em></p>\n<p>The users have used ReVTeX; simply change the <code class=\"docutils literal\"><span class=\"pre\">\\begin{acknowledgements}</span></code>\nor <code class=\"docutils literal\"><span class=\"pre\">\\acknowledgements</span></code>\nto <code class=\"docutils literal\"><span class=\"pre\">\\section*{Acknowledgements}</span></code> (of course also removing any eventual\n<code class=\"docutils literal\"><span class=\"pre\">\\end{acknowledgements}</span></code>).</p>\n</li>\n<li><p class=\"first\"><em>LaTeX Error: Environment widetext undefined.</em></p>\n<p>The authors have used ReVTeX; simply comment out all <code class=\"docutils literal\"><span class=\"pre\">\\begin{widetext}</span></code>\nand <code class=\"docutils literal\"><span class=\"pre\">\\end{widetext}</span></code> markers.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"problems\">\n<h3>Problems<a class=\"headerlink\" href=\"#problems\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">lineno</span></code> and <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code> are incompatible</p>\n<p>Problem: line numbers don&#8217;t appear when paragraph is followed by align etc.</p>\n<p>Solution: [from <a class=\"reference external\" href=\"http://phaseportrait.blogspot.nl/2007/08/lineno-and-amsmath-compatibility.html\">this link</a>]: paste this in the preamble:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%</span> <span class=\"n\">Patch</span> <span class=\"n\">lineno</span> <span class=\"n\">when</span> <span class=\"n\">used</span> <span class=\"k\">with</span> <span class=\"n\">amsmath</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname #1\\endcsname</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname end#1\\endcsname</span>\n\\<span class=\"n\">renewenvironment</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">linenomath</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\endcsname}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\endcsname\\endlinenomath}}%</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1*}}%</span>\n\\<span class=\"n\">AtBeginDocument</span><span class=\"p\">{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">equation</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">align</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">flalign</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">alignat</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">gather</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">multline</span><span class=\"p\">}</span><span class=\"o\">%</span>\n<span class=\"p\">}</span>\n<span class=\"o\">%%</span> <span class=\"n\">End</span> <span class=\"n\">patch</span> <span class=\"n\">lineno</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Breaking of in-line math equations</p>\n<p>Simply prevent by forcing equations into a math atom by surrouding them with braces,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>Here is an equation that should not be broken: ${E=mc^2}$.\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Equation/table or other text/maths element is just too wide.\nOption: locally change the fontsize by embedding the object in a <code class=\"docutils literal\"><span class=\"pre\">\\fontsize</span></code> block,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begingroup</span>\n\\<span class=\"n\">fontsize</span><span class=\"p\">{</span><span class=\"n\">new</span> <span class=\"n\">font</span> <span class=\"n\">size</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">g</span><span class=\"o\">.</span> <span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}{</span><span class=\"n\">skip</span><span class=\"p\">,</span> <span class=\"mi\">120</span><span class=\"o\">%</span> <span class=\"n\">of</span> <span class=\"n\">previous</span><span class=\"p\">}</span>\\<span class=\"n\">selectfont</span>\n<span class=\"p\">[</span> <span class=\"n\">element</span><span class=\"p\">]</span>\n\\<span class=\"n\">endgroup</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">MnSymbol</span></code> is problematic and clashes with amsmath.</p>\n<p>One solution is to import individual symbols according to these\n<a class=\"reference external\" href=\"http://tex.stackexchange.com/questions/36006/importing-single-symbol-from-mnsymbol\">instructions</a>.</p>\n</li>\n<li><p class=\"first\">Equations spacing in <code class=\"docutils literal\"><span class=\"pre\">align</span></code> environment is too tight.</p>\n<p>The simple solution is to include a spacing specifier of the form <code class=\"docutils literal\"><span class=\"pre\">\\nonumber</span> <span class=\"pre\">\\\\[5pt]</span></code>,\nwhere <code class=\"docutils literal\"><span class=\"pre\">5pt</span></code> is a good compromise.</p>\n<p>This spacing can also be set globally by including <code class=\"docutils literal\"><span class=\"pre\">\\setlength{\\jot}{5pt}</span></code> before the\n<code class=\"docutils literal\"><span class=\"pre\">\\begin{document}</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"references-formatting\">\n<h3>References formatting<a class=\"headerlink\" href=\"#references-formatting\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>References should be in the following format:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Author names are in comma-separated list (except for the last author,\nwith no comma and an <em>and</em>) with format [initials] [last name].</li>\n<li>Titles are in italics, and capitalization is displayed (using <em>e.g.</em> {{ [title] }} in BiBTeX). For PRL: nouns capitalized.</li>\n<li>Journal names are abbreviated. A useful resource is this <a class=\"reference external\" href=\"http://www.efm.leeds.ac.uk/~mark/ISIabbr/A_abrvjt.html\">list of journal abbreviations</a>.</li>\n<li>Volume number is in bold.</li>\n<li>Issue number can be left out; if included, in parentheses after volume nr.</li>\n<li>Year is in parentheses.</li>\n<li>Commas separate all elements.</li>\n<li>All doi are present and displayed in format doi:[doi]. Note that the doi does\n<em>not</em> include any <code class=\"docutils literal\"><span class=\"pre\">http://doi.org</span></code> or similar URL prefix. Instead, it should\nbe of the form <code class=\"docutils literal\"><span class=\"pre\">10.###[...]/[...]</span></code>.</li>\n<li>The reference is closed by a <code class=\"docutils literal\"><span class=\"pre\">.</span></code></li>\n</ul>\n<p>For arXiv entries, verify if the paper has been published in the meantime.\nIf so, replace this reference with its proper citation.\nIf not, use the format <code class=\"docutils literal\"><span class=\"pre\">\\href{https://arxiv.org/abs/####.#####}{arXiv:####.#####}</span></code>,\nand remove any <code class=\"docutils literal\"><span class=\"pre\">(YEAR)</span></code>.</p>\n<p>J. Stat. Mech. and JHEP are annoying (because the volume number is the year).\nManually remove volume nr for these, so the format becomes <code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee,</span> <span class=\"pre\">\\emp{Bee's</span> <span class=\"pre\">nice</span> <span class=\"pre\">paper},</span> <span class=\"pre\">J.</span> <span class=\"pre\">Stat.</span> <span class=\"pre\">Mech.:</span> <span class=\"pre\">Th.</span> <span class=\"pre\">Exp.</span> <span class=\"pre\">[P,L]#####</span> <span class=\"pre\">(20##),</span> <span class=\"pre\">\\doi{10...}.</span></code></p>\n<p>J. Phys. A is also annoying. Up to and including volume 39 (2006), it&#8217;s\nJ. Phys. A: Math. Gen. Afterwards, volume 40 (2007) onwards, it&#8217;s\nJ. Phys. A: Math. Theor.</p>\n<p>Entries in the bibliography which are not references but footnotes,\nshould be formatted as such in the main text (using <code class=\"docutils literal\"><span class=\"pre\">\\footnote{}</span></code>).</p>\n<p>Check that all DOIs work. Remove the <code class=\"docutils literal\"><span class=\"pre\">\\meta</span></code> at the end of the bibitem\nif it is present.</p>\n</div></blockquote>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"layout-verification\">\n<h3>Layout verification<a class=\"headerlink\" href=\"#layout-verification\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>The whole paper should be scanned through, and the layout of equations\nand figures should be checked and corrected if necessary.</p>\n<p>In particular, the punctuation of equations should be checked and corrected\nif necessary.</p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/proofs", "Proofs", "N", "next"], ["guides/editorial/production", "Production", "P", "previous"]], "title": "Initial Production of SciPost Publications"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/online_publication.fjson b/docs/users/_build/json/guides/editorial/production/online_publication.fjson
index 1463d1ff8a213f88352d468ca6aa4d5d05034c0a..ebe467454f71af1a57ab7bcbec5fe299a29e0797 100644
--- a/docs/users/_build/json/guides/editorial/production/online_publication.fjson
+++ b/docs/users/_build/json/guides/editorial/production/online_publication.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/maintenance", "Maintenance of SciPost Publications", "N", "next"], ["guides/editorial/production/proofs", "Proofs", "P", "previous"]], "body": "<div class=\"section\" id=\"online-publication\">\n<h1>Online Publication<a class=\"headerlink\" href=\"#online-publication\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>. It describes the final publication of manuscripts, after final author proofs approval.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"finalization-of-manuscript-production\">\n<h2>Finalization of manuscript production<a class=\"headerlink\" href=\"#finalization-of-manuscript-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<p>The steps described here follow up on the <a class=\"reference internal\" href=\"../initial_production/\"><span class=\"doc\">Initial Production of SciPost Publications</span></a> instructions used by production officers.</p>\n<div class=\"section\" id=\"preparation-of-final-version-of-record\">\n<h3>Preparation of final version of record<a class=\"headerlink\" href=\"#preparation-of-final-version-of-record\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>Copy the whole paper folder from folder [journal name]/IN_PRODUCTION \\to [journal name]/Volume_[volume nr].</li>\n<li>Check online to see which paper number is next available.</li>\n<li>Rename this folder using the convention [journal name]_[volume number]([issue number])_[paper nr].</li>\n<li>Within this folder, take the author-accepted version tex file and rename it using the convention [journal name abbrev]_[volume nr]_[issue nr]_[paper nr].tex.</li>\n<li>In this tex source, replace the ??? with the 3-digit paper number (3 places: 2 in preamble, 1 in copyright statement).</li>\n<li>Ensure that the author names are in format Abe Bee, Cee Dee and Elle Fine.</li>\n<li>Insert the correct Received, Accepted and Published dates in copyright statement.</li>\n<li>Make sure linenumbers are deactivated.</li>\n<li>Does the table of contents (if present) look OK? (Beware of hanging closing\nline pushed to top of second page). If needed, adjust the <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code> spacings\ndefined around the table of contents, and/or insert an additional <code class=\"docutils literal\"><span class=\"pre\">vspace</span></code>\nwith negative spacing before the abstract.</li>\n<li>If the author-accepted proofs version used BiBTeX, copy the contents of the bbl\nfile into the .tex file, so that BiBTeX is not needed anymore.</li>\n<li>Verify each reference: authors, title, journal reference, doi link.\nManually correct any incorrect references.</li>\n<li>Recompile the LaTeX, and CAREFULLY CHECK EVERYTHING.</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"uploading-to-scipost-org\">\n<h3>Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code><a class=\"headerlink\" href=\"#uploading-to-scipost-org\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>From the Submissions Pool, click on the link to initiate the publication process.</li>\n<li>Fill in the initiate publication form (using the dates in format YYYY-MM-DD). Submit. You are now on the validate publication page.</li>\n<li>Check that the paper number is correct. If not, modify the final tex source to account for this (see previous subsection).</li>\n<li>Select who the first author is (if registered as a Contributor; if not, inform the EdAdmin, and choose another author who is registered).</li>\n<li>Select the final version&#8217;s pdf file.</li>\n<li>Submit. The paper is now published online.</li>\n</ol>\n</div></blockquote>\n</div>\n</div>\n<div class=\"section\" id=\"metadata-preparation-and-doi-registration-with-crossref\">\n<h2>Metadata preparation and DOI registration with Crossref<a class=\"headerlink\" href=\"#metadata-preparation-and-doi-registration-with-crossref\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div>These tasks must be performed by <strong>Editorial Administrators</strong>,\nwho have access to the Publication&#8217;s editorial tools\nby navigating to the Publication&#8217;s page.</div></blockquote>\n<div class=\"section\" id=\"author-listing\">\n<h3>Author listing<a class=\"headerlink\" href=\"#author-listing\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>If not all authors appear in the list presented at the top of the EdAdmin tools,\nthese should be added by following the <code class=\"docutils literal\"><span class=\"pre\">Add</span> <span class=\"pre\">a</span> <span class=\"pre\">missing</span> <span class=\"pre\">author</span></code> link.</p>\n<p>The search form can be used to find missing authors who might be\nRegistered Contributors. If found, a one-click process adds them.</p>\n<p>You can otherwise create an UnregisteredAuthor object instance and link\nit to the publication, by simply filling in the first and last name fields\nand clicking on <code class=\"docutils literal\"><span class=\"pre\">Add</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-citations-list\">\n<h3>Preparation of the citations list<a class=\"headerlink\" href=\"#preparation-of-the-citations-list\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Follow the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">citation</span> <span class=\"pre\">list</span> <span class=\"pre\">metadata</span></code> link.</p>\n<p>In the text area, paste the entire list of bibitems from the paper&#8217;s\nfinal <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file. Upon clicking on <code class=\"docutils literal\"><span class=\"pre\">Submit</span></code>, all DOI entires\nare extracted and formatted into XML metadata which is saved in the\ndatabase.</p>\n<p>Citations with no valid DOI (<em>e.g.</em> arXiv preprints, books, etc)\ndo not appear in the metadata.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"funding-info\">\n<h3>Funding info<a class=\"headerlink\" href=\"#funding-info\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">funding</span> <span class=\"pre\">info</span> <span class=\"pre\">metadata</span></code> link leads to a\npage where the funding statement of the Publication&#8217;s <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file\n(found either as a separate subsection or in the Acknowledgements)\ncan be pasted.</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-metadata-xml\">\n<h3>Preparation of the metadata XML<a class=\"headerlink\" href=\"#preparation-of-the-metadata-xml\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">metadata</span> <span class=\"pre\">XML</span></code> link auto-generates a\nfull XML text field containing all the provided information,\nproperly formatted for the upcoming submission to Crossref.</p>\n<p>Verify that the first author is indeed enclosed in a\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='first'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tag,\nand that subsequent authors (enclosed in\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='additional'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tags)\nappear in the order of the Publication&#8217;s author list.</p>\n<p>Once the metadata is set, clicking on <code class=\"docutils literal\"><span class=\"pre\">Accept</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span></code>\nsaves the metadata to the database and returns one to the Publication&#8217;s\npage.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"metadata-testing-and-deposit\">\n<h3>Metadata testing and deposit<a class=\"headerlink\" href=\"#metadata-testing-and-deposit\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>At this stage, the metadata is ready for uploading to Crossref.\nThis occurs via a POST query to either the test or live Crossref server.</p>\n<p>Clicking on <code class=\"docutils literal\"><span class=\"pre\">Test</span> <span class=\"pre\">metadata</span> <span class=\"pre\">deposit</span></code> immediately posts the metadata\nto the test server, and takes you to a page where the server&#8217;s\nresponse headers are displayed. The server also sends a more detailed\nresponse via email\n(to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>; if you do not have access to this mailbox,\nask SciPost Administration) with the success status.</p>\n<p>Similarly, the actual deposit is immediately performed upon clicking on the\n<code class=\"docutils literal\"><span class=\"pre\">Deposit</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span> <span class=\"pre\">to</span> <span class=\"pre\">Crossref</span></code>. The response headers are displayed,\nand a detailed email response is sent by Crossref to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>.</p>\n<p><strong>This completes the publication process.</strong></p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "sourcename": "guides/editorial/production/online_publication.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "next": {"link": "../../maintenance/", "title": "Maintenance of SciPost Publications"}, "customsidebar": null, "display_toc": true, "title": "Online Publication", "prev": {"link": "../proofs/", "title": "Proofs"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Online Publication</a><ul>\n<li><a class=\"reference internal\" href=\"#finalization-of-manuscript-production\">Finalization of manuscript production</a><ul>\n<li><a class=\"reference internal\" href=\"#preparation-of-final-version-of-record\">Preparation of final version of record</a></li>\n<li><a class=\"reference internal\" href=\"#uploading-to-scipost-org\">Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code></a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a><ul>\n<li><a class=\"reference internal\" href=\"#author-listing\">Author listing</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-citations-list\">Preparation of the citations list</a></li>\n<li><a class=\"reference internal\" href=\"#funding-info\">Funding info</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-metadata-xml\">Preparation of the metadata XML</a></li>\n<li><a class=\"reference internal\" href=\"#metadata-testing-and-deposit\">Metadata testing and deposit</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/production/online_publication", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../../maintenance/", "title": "Maintenance of SciPost Publications"}, "prev": {"link": "../proofs/", "title": "Proofs"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Online Publication</a><ul>\n<li><a class=\"reference internal\" href=\"#finalization-of-manuscript-production\">Finalization of manuscript production</a><ul>\n<li><a class=\"reference internal\" href=\"#preparation-of-final-version-of-record\">Preparation of final version of record</a></li>\n<li><a class=\"reference internal\" href=\"#uploading-to-scipost-org\">Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code></a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a><ul>\n<li><a class=\"reference internal\" href=\"#author-listing\">Author listing</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-citations-list\">Preparation of the citations list</a></li>\n<li><a class=\"reference internal\" href=\"#funding-info\">Funding info</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-metadata-xml\">Preparation of the metadata XML</a></li>\n<li><a class=\"reference internal\" href=\"#metadata-testing-and-deposit\">Metadata testing and deposit</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/online_publication.txt", "current_page_name": "guides/editorial/production/online_publication", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"online-publication\">\n<h1>Online Publication<a class=\"headerlink\" href=\"#online-publication\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>. It describes the final publication of manuscripts, after final author proofs approval.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"finalization-of-manuscript-production\">\n<h2>Finalization of manuscript production<a class=\"headerlink\" href=\"#finalization-of-manuscript-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<p>The steps described here follow up on the <a class=\"reference internal\" href=\"../initial_production/\"><span class=\"doc\">Initial Production of SciPost Publications</span></a> instructions used by production officers.</p>\n<div class=\"section\" id=\"preparation-of-final-version-of-record\">\n<h3>Preparation of final version of record<a class=\"headerlink\" href=\"#preparation-of-final-version-of-record\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>Copy the whole paper folder from folder [journal name]/IN_PRODUCTION \\to [journal name]/Volume_[volume nr].</li>\n<li>Check online to see which paper number is next available.</li>\n<li>Rename this folder using the convention [journal name]_[volume number]([issue number])_[paper nr].</li>\n<li>Within this folder, take the author-accepted version tex file and rename it using the convention [journal name abbrev]_[volume nr]_[issue nr]_[paper nr].tex.</li>\n<li>In this tex source, replace the ??? with the 3-digit paper number (3 places: 2 in preamble, 1 in copyright statement).</li>\n<li>Ensure that the author names are in format Abe Bee, Cee Dee and Elle Fine.</li>\n<li>Insert the correct Received, Accepted and Published dates in copyright statement.</li>\n<li>Make sure linenumbers are deactivated.</li>\n<li>Does the table of contents (if present) look OK? (Beware of hanging closing\nline pushed to top of second page). If needed, adjust the <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code> spacings\ndefined around the table of contents, and/or insert an additional <code class=\"docutils literal\"><span class=\"pre\">vspace</span></code>\nwith negative spacing before the abstract.</li>\n<li>If the author-accepted proofs version used BiBTeX, copy the contents of the bbl\nfile into the .tex file, so that BiBTeX is not needed anymore.</li>\n<li>Verify each reference: authors, title, journal reference, doi link.\nManually correct any incorrect references.</li>\n<li>Recompile the LaTeX, and CAREFULLY CHECK EVERYTHING.</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"uploading-to-scipost-org\">\n<h3>Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code><a class=\"headerlink\" href=\"#uploading-to-scipost-org\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>From the Submissions Pool, click on the link to initiate the publication process.</li>\n<li>Fill in the initiate publication form (using the dates in format YYYY-MM-DD). Submit. You are now on the validate publication page.</li>\n<li>Check that the paper number is correct. If not, modify the final tex source to account for this (see previous subsection).</li>\n<li>Select who the first author is (if registered as a Contributor; if not, inform the EdAdmin, and choose another author who is registered).</li>\n<li>Select the final version&#8217;s pdf file.</li>\n<li>Submit. The paper is now published online.</li>\n</ol>\n</div></blockquote>\n</div>\n</div>\n<div class=\"section\" id=\"metadata-preparation-and-doi-registration-with-crossref\">\n<h2>Metadata preparation and DOI registration with Crossref<a class=\"headerlink\" href=\"#metadata-preparation-and-doi-registration-with-crossref\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div>These tasks must be performed by <strong>Editorial Administrators</strong>,\nwho have access to the Publication&#8217;s editorial tools\nby navigating to the Publication&#8217;s page.</div></blockquote>\n<div class=\"section\" id=\"author-listing\">\n<h3>Author listing<a class=\"headerlink\" href=\"#author-listing\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>If not all authors appear in the list presented at the top of the EdAdmin tools,\nthese should be added by following the <code class=\"docutils literal\"><span class=\"pre\">Add</span> <span class=\"pre\">a</span> <span class=\"pre\">missing</span> <span class=\"pre\">author</span></code> link.</p>\n<p>The search form can be used to find missing authors who might be\nRegistered Contributors. If found, a one-click process adds them.</p>\n<p>You can otherwise create an UnregisteredAuthor object instance and link\nit to the publication, by simply filling in the first and last name fields\nand clicking on <code class=\"docutils literal\"><span class=\"pre\">Add</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-citations-list\">\n<h3>Preparation of the citations list<a class=\"headerlink\" href=\"#preparation-of-the-citations-list\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Follow the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">citation</span> <span class=\"pre\">list</span> <span class=\"pre\">metadata</span></code> link.</p>\n<p>In the text area, paste the entire list of bibitems from the paper&#8217;s\nfinal <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file. Upon clicking on <code class=\"docutils literal\"><span class=\"pre\">Submit</span></code>, all DOI entires\nare extracted and formatted into XML metadata which is saved in the\ndatabase.</p>\n<p>Citations with no valid DOI (<em>e.g.</em> arXiv preprints, books, etc)\ndo not appear in the metadata.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"funding-info\">\n<h3>Funding info<a class=\"headerlink\" href=\"#funding-info\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">funding</span> <span class=\"pre\">info</span> <span class=\"pre\">metadata</span></code> link leads to a\npage where the funding statement of the Publication&#8217;s <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file\n(found either as a separate subsection or in the Acknowledgements)\ncan be pasted.</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-metadata-xml\">\n<h3>Preparation of the metadata XML<a class=\"headerlink\" href=\"#preparation-of-the-metadata-xml\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">metadata</span> <span class=\"pre\">XML</span></code> link auto-generates a\nfull XML text field containing all the provided information,\nproperly formatted for the upcoming submission to Crossref.</p>\n<p>Verify that the first author is indeed enclosed in a\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='first'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tag,\nand that subsequent authors (enclosed in\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='additional'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tags)\nappear in the order of the Publication&#8217;s author list.</p>\n<p>Once the metadata is set, clicking on <code class=\"docutils literal\"><span class=\"pre\">Accept</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span></code>\nsaves the metadata to the database and returns one to the Publication&#8217;s\npage.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"metadata-testing-and-deposit\">\n<h3>Metadata testing and deposit<a class=\"headerlink\" href=\"#metadata-testing-and-deposit\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>At this stage, the metadata is ready for uploading to Crossref.\nThis occurs via a POST query to either the test or live Crossref server.</p>\n<p>Clicking on <code class=\"docutils literal\"><span class=\"pre\">Test</span> <span class=\"pre\">metadata</span> <span class=\"pre\">deposit</span></code> immediately posts the metadata\nto the test server, and takes you to a page where the server&#8217;s\nresponse headers are displayed. The server also sends a more detailed\nresponse via email\n(to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>; if you do not have access to this mailbox,\nask SciPost Administration) with the success status.</p>\n<p>Similarly, the actual deposit is immediately performed upon clicking on the\n<code class=\"docutils literal\"><span class=\"pre\">Deposit</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span> <span class=\"pre\">to</span> <span class=\"pre\">Crossref</span></code>. The response headers are displayed,\nand a detailed email response is sent by Crossref to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>.</p>\n<p><strong>This completes the publication process.</strong></p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/maintenance", "Maintenance of SciPost Publications", "N", "next"], ["guides/editorial/production/proofs", "Proofs", "P", "previous"]], "title": "Online Publication"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/proofs.fjson b/docs/users/_build/json/guides/editorial/production/proofs.fjson
index 44d62abe673ac195fc30f7bc069e63d1f4c779b6..94976b4ac230667952c6c2ba521824800e647626 100644
--- a/docs/users/_build/json/guides/editorial/production/proofs.fjson
+++ b/docs/users/_build/json/guides/editorial/production/proofs.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "N", "next"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "P", "previous"]], "body": "<div class=\"section\" id=\"proofs\">\n<h1>Proofs<a class=\"headerlink\" href=\"#proofs\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Production supervisors</strong>. It describes the proofs cycle between production team and manuscript authors.</p>\n<div class=\"section\" id=\"proofs-version-production\">\n<h2>Proofs version production<a class=\"headerlink\" href=\"#proofs-version-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Once the paper has been properly formatted, the <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> and <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> files\nshould be copied into new files carrying the <code class=\"docutils literal\"><span class=\"pre\">_proofs_v[nr]</span></code> suffix,\nfor example <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1699_9999v9_Bee_proofs_v1.tex</span></code>.</li>\n<li>The <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> proofs should be emailed to the authors for verification.\nAuthors should return either an annotated pdf or a list of corrections\nby plain text email.</li>\n<li>Any modifications should be implemented directly in the main <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</li>\n<li>If any further check by the authors are required, start this proofs\ntodo-list again, increasing the proofs version number.</li>\n<li>Once the authors have approved the proofs, the paper can be put forward\nto online publication.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "sourcename": "guides/editorial/production/proofs.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "next": {"link": "../online_publication/", "title": "Online Publication"}, "customsidebar": null, "display_toc": true, "title": "Proofs", "prev": {"link": "../initial_production/", "title": "Initial Production of SciPost Publications"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Proofs</a><ul>\n<li><a class=\"reference internal\" href=\"#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/production/proofs", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../online_publication/", "title": "Online Publication"}, "prev": {"link": "../initial_production/", "title": "Initial Production of SciPost Publications"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Proofs</a><ul>\n<li><a class=\"reference internal\" href=\"#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/proofs.txt", "current_page_name": "guides/editorial/production/proofs", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"proofs\">\n<h1>Proofs<a class=\"headerlink\" href=\"#proofs\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Production supervisors</strong>. It describes the proofs cycle between production team and manuscript authors.</p>\n<div class=\"section\" id=\"proofs-version-production\">\n<h2>Proofs version production<a class=\"headerlink\" href=\"#proofs-version-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Once the paper has been properly formatted, the <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> and <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> files\nshould be copied into new files carrying the <code class=\"docutils literal\"><span class=\"pre\">_proofs_v[nr]</span></code> suffix,\nfor example <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1699_9999v9_Bee_proofs_v1.tex</span></code>.</li>\n<li>The <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> proofs should be emailed to the authors for verification.\nAuthors should return either an annotated pdf or a list of corrections\nby plain text email.</li>\n<li>Any modifications should be implemented directly in the main <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</li>\n<li>If any further check by the authors are required, start this proofs\ntodo-list again, increasing the proofs version number.</li>\n<li>Once the authors have approved the proofs, the paper can be put forward\nto online publication.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "N", "next"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "P", "previous"]], "title": "Proofs"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/submissions_processing.fjson b/docs/users/_build/json/guides/editorial/submissions_processing.fjson
index 654d1c2f4cee1df8a55adb074db7828e6328ca1c..26f85396466cabae3eb0870851877657b1898d5a 100644
--- a/docs/users/_build/json/guides/editorial/submissions_processing.fjson
+++ b/docs/users/_build/json/guides/editorial/submissions_processing.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production", "Production", "N", "next"], ["guides/editorial", "Editorial", "P", "previous"]], "body": "<div class=\"section\" id=\"submission-processing\">\n<h1>Submission processing<a class=\"headerlink\" href=\"#submission-processing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the workflow starting at the moment of submission, and leading up to the final decision by the Editorial College. Editorial Administrators should use these instructions to correctly shepherd submissions through the whole refereeing process.</p>\n<div class=\"section\" id=\"reception-phase\">\n<h2>Reception phase<a class=\"headerlink\" href=\"#reception-phase\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"plagiarism-check\">\n<h3>Plagiarism check<a class=\"headerlink\" href=\"#plagiarism-check\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Upon reception of a submission, the first action is to perform the plagiarism check. This is performed using Crossref Similarity Check (hereunder CSC), which makes use of the iThenticate application. EdAdmin should navigate to the <a class=\"reference external\" href=\"https://crosscheck.ithenticate.com/en_us/login\">crosscheck page</a> and login using the credentials (ask SciPost Admin if you don&#8217;t have any).</p>\n<p>The .pdf of the submission should be obtained from arXiv, renamed <code class=\"docutils literal\"><span class=\"pre\">####_#####v#_[lastname].pdf</span></code>, and saved in the shared folder <code class=\"docutils literal\"><span class=\"pre\">SURFDRIVE/SCIPOST_SUBMISSIONS/[journal_name]/YYYY_MM</span></code>. This file should then be uploaded to CSC, in a folder <code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">name]_submissions/YYYY-MM</span></code> (this folder should be created if this is that month&#8217;s first submission; if creating the folder, select the option <code class=\"docutils literal\"><span class=\"pre\">Exclude</span> <span class=\"pre\">bibliography</span></code>). To upload, click on <code class=\"docutils literal\"><span class=\"pre\">Submit</span> <span class=\"pre\">a</span> <span class=\"pre\">document</span></code>. You will be prompted for the (first) author first and last names, together with the document title (namely: the title of the paper). Clicking <code class=\"docutils literal\"><span class=\"pre\">upload</span></code> starts the plagiarism check (status becomes: processing).</p>\n<p>After a few minutes, the plagiarism check document becomes available (under Report). This should be examined thoroughly, downloaded and saved to the SURFDRIVE folder above. A percentage above about 15% is cause for concern.</p>\n</div>\n</div>\n<div class=\"section\" id=\"pre-screening\">\n<h2>Pre-screening<a class=\"headerlink\" href=\"#pre-screening\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"assignments\">\n<h3>Assignments<a class=\"headerlink\" href=\"#assignments\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n<div class=\"section\" id=\"during-refereeing\">\n<h2>During refereeing<a class=\"headerlink\" href=\"#during-refereeing\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"compliance-with-crossref-doi-requirements\">\n<h3>Compliance with Crossref DOI requirements<a class=\"headerlink\" href=\"#compliance-with-crossref-doi-requirements\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be asked to do so in their eventual\nresubmission.</p>\n</div>\n</div>\n</div>\n", "sourcename": "guides/editorial/submissions_processing.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "next": {"link": "../production/", "title": "Production"}, "customsidebar": null, "display_toc": true, "title": "Submission processing", "prev": {"link": "../", "title": "Editorial"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Submission processing</a><ul>\n<li><a class=\"reference internal\" href=\"#reception-phase\">Reception phase</a><ul>\n<li><a class=\"reference internal\" href=\"#plagiarism-check\">Plagiarism check</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#pre-screening\">Pre-screening</a><ul>\n<li><a class=\"reference internal\" href=\"#assignments\">Assignments</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#during-refereeing\">During refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#compliance-with-crossref-doi-requirements\">Compliance with Crossref DOI requirements</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/editorial/submissions_processing", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../production/", "title": "Production"}, "prev": {"link": "../", "title": "Editorial"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Submission processing</a><ul>\n<li><a class=\"reference internal\" href=\"#reception-phase\">Reception phase</a><ul>\n<li><a class=\"reference internal\" href=\"#plagiarism-check\">Plagiarism check</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#pre-screening\">Pre-screening</a><ul>\n<li><a class=\"reference internal\" href=\"#assignments\">Assignments</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#during-refereeing\">During refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#compliance-with-crossref-doi-requirements\">Compliance with Crossref DOI requirements</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/submissions_processing.txt", "current_page_name": "guides/editorial/submissions_processing", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"submission-processing\">\n<h1>Submission processing<a class=\"headerlink\" href=\"#submission-processing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the workflow starting at the moment of submission, and leading up to the final decision by the Editorial College. Editorial Administrators should use these instructions to correctly shepherd submissions through the whole refereeing process.</p>\n<div class=\"section\" id=\"reception-phase\">\n<h2>Reception phase<a class=\"headerlink\" href=\"#reception-phase\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"plagiarism-check\">\n<h3>Plagiarism check<a class=\"headerlink\" href=\"#plagiarism-check\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Upon reception of a submission, the first action is to perform the plagiarism check. This is performed using Crossref Similarity Check (hereunder CSC), which makes use of the iThenticate application. EdAdmin should navigate to the <a class=\"reference external\" href=\"https://crosscheck.ithenticate.com/en_us/login\">crosscheck page</a> and login using the credentials (ask SciPost Admin if you don&#8217;t have any).</p>\n<p>The .pdf of the submission should be obtained from arXiv, renamed <code class=\"docutils literal\"><span class=\"pre\">####_#####v#_[lastname].pdf</span></code>, and saved in the shared folder <code class=\"docutils literal\"><span class=\"pre\">SURFDRIVE/SCIPOST_SUBMISSIONS/[journal_name]/YYYY_MM</span></code>. This file should then be uploaded to CSC, in a folder <code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">name]_submissions/YYYY-MM</span></code> (this folder should be created if this is that month&#8217;s first submission; if creating the folder, select the option <code class=\"docutils literal\"><span class=\"pre\">Exclude</span> <span class=\"pre\">bibliography</span></code>). To upload, click on <code class=\"docutils literal\"><span class=\"pre\">Submit</span> <span class=\"pre\">a</span> <span class=\"pre\">document</span></code>. You will be prompted for the (first) author first and last names, together with the document title (namely: the title of the paper). Clicking <code class=\"docutils literal\"><span class=\"pre\">upload</span></code> starts the plagiarism check (status becomes: processing).</p>\n<p>After a few minutes, the plagiarism check document becomes available (under Report). This should be examined thoroughly, downloaded and saved to the SURFDRIVE folder above. A percentage above about 15% is cause for concern.</p>\n</div>\n</div>\n<div class=\"section\" id=\"pre-screening\">\n<h2>Pre-screening<a class=\"headerlink\" href=\"#pre-screening\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"assignments\">\n<h3>Assignments<a class=\"headerlink\" href=\"#assignments\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n<div class=\"section\" id=\"during-refereeing\">\n<h2>During refereeing<a class=\"headerlink\" href=\"#during-refereeing\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"compliance-with-crossref-doi-requirements\">\n<h3>Compliance with Crossref DOI requirements<a class=\"headerlink\" href=\"#compliance-with-crossref-doi-requirements\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be asked to do so in their eventual\nresubmission.</p>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production", "Production", "N", "next"], ["guides/editorial", "Editorial", "P", "previous"]], "title": "Submission processing"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/referees.fjson b/docs/users/_build/json/guides/referees.fjson
index f86b0dc651aa2c45e5f42496ed93a0ab7305a2c7..302966abf11173239cb5525a12ed061eeeb2d9f0 100644
--- a/docs/users/_build/json/guides/referees.fjson
+++ b/docs/users/_build/json/guides/referees.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial", "Editorial", "N", "next"], ["guides/authors", "Authoring", "P", "previous"]], "body": "<div class=\"section\" id=\"refereeing\">\n<h1>Refereeing<a class=\"headerlink\" href=\"#refereeing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>referees</strong>. It describes how to do an optimal job when writing reports on SciPost submissions.</p>\n<div class=\"section\" id=\"good-citizenship-as-a-referee\">\n<h2>Good citizenship as a referee<a class=\"headerlink\" href=\"#good-citizenship-as-a-referee\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Promptly responding to a refereeing invitation.</li>\n<li>Submitting your report by the deadline.</li>\n<li>Writing a high-quality report</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"the-characteristics-of-a-high-quality-report\">\n<h2>The characteristics of a high-quality report<a class=\"headerlink\" href=\"#the-characteristics-of-a-high-quality-report\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "sourcename": "guides/referees.txt", "metatags": "", "meta": {}, "parents": [{"link": "../", "title": "Guides"}], "next": {"link": "../editorial/", "title": "Editorial"}, "customsidebar": null, "display_toc": true, "title": "Refereeing", "prev": {"link": "../authors/", "title": "Authoring"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li><a class=\"reference internal\" href=\"#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "guides/referees", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../editorial/", "title": "Editorial"}, "prev": {"link": "../authors/", "title": "Authoring"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li><a class=\"reference internal\" href=\"#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/referees.txt", "current_page_name": "guides/referees", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"refereeing\">\n<h1>Refereeing<a class=\"headerlink\" href=\"#refereeing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>referees</strong>. It describes how to do an optimal job when writing reports on SciPost submissions.</p>\n<div class=\"section\" id=\"good-citizenship-as-a-referee\">\n<h2>Good citizenship as a referee<a class=\"headerlink\" href=\"#good-citizenship-as-a-referee\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Promptly responding to a refereeing invitation.</li>\n<li>Submitting your report by the deadline.</li>\n<li>Writing a high-quality report</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"the-characteristics-of-a-high-quality-report\">\n<h2>The characteristics of a high-quality report<a class=\"headerlink\" href=\"#the-characteristics-of-a-high-quality-report\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial", "Editorial", "N", "next"], ["guides/authors", "Authoring", "P", "previous"]], "title": "Refereeing"}
\ No newline at end of file
diff --git a/docs/users/_build/json/index.fjson b/docs/users/_build/json/index.fjson
index 12647c39ae246ae8282694146cca37e0b230ebd8..5cb8e8b14d98ef9cc402b8edbc054fa1c44ab357 100644
--- a/docs/users/_build/json/index.fjson
+++ b/docs/users/_build/json/index.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles", "Roles: responsibilities and task lists", "N", "next"]], "body": "<div class=\"section\" id=\"welcome-to-scipost-s-documentation\">\n<h1>Welcome to SciPost&#8217;s documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"roles/\">Roles: responsibilities and task lists</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/editorial/\">Editorial roles</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/production/\">Production roles</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"guides/\">Guides</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/authors/\">Authoring</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/referees/\">Refereeing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/editorial/\">Editorial</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "sourcename": "index.txt", "metatags": "", "meta": {}, "parents": [], "next": {"link": "roles/", "title": "Roles: responsibilities and task lists"}, "customsidebar": null, "display_toc": true, "title": "Welcome to SciPost&#8217;s documentation", "prev": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "index", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "roles/", "title": "Roles: responsibilities and task lists"}, "prev": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "sourcename": "index.txt", "current_page_name": "index", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"welcome-to-scipost-s-documentation\">\n<h1>Welcome to SciPost&#8217;s documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"roles/\">Roles: responsibilities and task lists</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/editorial/\">Editorial roles</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/production/\">Production roles</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"guides/\">Guides</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/authors/\">Authoring</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/referees/\">Refereeing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/editorial/\">Editorial</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles", "Roles: responsibilities and task lists", "N", "next"]], "title": "Welcome to SciPost&#8217;s documentation"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles.fjson b/docs/users/_build/json/roles.fjson
index 3d7c2eac416af316406f22f5ff55aee4677fd68d..26d341433accf9fe11b02a038e619c8af4e8281d 100644
--- a/docs/users/_build/json/roles.fjson
+++ b/docs/users/_build/json/roles.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial", "Editorial roles", "N", "next"], ["index", "Welcome to SciPost&#8217;s documentation", "P", "previous"]], "body": "<div class=\"section\" id=\"roles-responsibilities-and-task-lists\">\n<h1>Roles: responsibilities and task lists<a class=\"headerlink\" href=\"#roles-responsibilities-and-task-lists\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_supervisors/\">Production Supervisors</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#responsibilities\">Responsibilities</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#tasks\">Tasks</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_officers/\">Production Officers</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_officers/#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "sourcename": "roles.txt", "metatags": "", "meta": {}, "parents": [], "next": {"link": "editorial/", "title": "Editorial roles"}, "customsidebar": null, "display_toc": false, "title": "Roles: responsibilities and task lists", "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s documentation"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Roles: responsibilities and task lists</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "editorial/", "title": "Editorial roles"}, "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s documentation"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Roles: responsibilities and task lists</a></li>\n</ul>\n", "sourcename": "roles.txt", "current_page_name": "roles", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"roles-responsibilities-and-task-lists\">\n<h1>Roles: responsibilities and task lists<a class=\"headerlink\" href=\"#roles-responsibilities-and-task-lists\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_supervisors/\">Production Supervisors</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#responsibilities\">Responsibilities</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#tasks\">Tasks</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_officers/\">Production Officers</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_officers/#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial", "Editorial roles", "N", "next"], ["index", "Welcome to SciPost&#8217;s documentation", "P", "previous"]], "title": "Roles: responsibilities and task lists"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial.fjson b/docs/users/_build/json/roles/editorial.fjson
index a5b8fb752e36a5e5b44cb937092d86d7c31824e7..d47aeab3aa41b3a4dc549f8b1c1217e99662dbdd 100644
--- a/docs/users/_build/json/roles/editorial.fjson
+++ b/docs/users/_build/json/roles/editorial.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "N", "next"], ["roles", "Roles: responsibilities and task lists", "P", "previous"]], "body": "<div class=\"section\" id=\"editorial-roles\">\n<h1>Editorial roles<a class=\"headerlink\" href=\"#editorial-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "sourcename": "roles/editorial.txt", "metatags": "", "meta": {}, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "next": {"link": "editorial_administrators/", "title": "Editorial Administrators"}, "customsidebar": null, "display_toc": false, "title": "Editorial roles", "prev": {"link": "../", "title": "Roles: responsibilities and task lists"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial roles</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/editorial", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "editorial_administrators/", "title": "Editorial Administrators"}, "prev": {"link": "../", "title": "Roles: responsibilities and task lists"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial roles</a></li>\n</ul>\n", "sourcename": "roles/editorial.txt", "current_page_name": "roles/editorial", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-roles\">\n<h1>Editorial roles<a class=\"headerlink\" href=\"#editorial-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "N", "next"], ["roles", "Roles: responsibilities and task lists", "P", "previous"]], "title": "Editorial roles"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial/editorial_administrators.fjson b/docs/users/_build/json/roles/editorial/editorial_administrators.fjson
index b92b94ad62071e7382160f1e4257fa947f59bafe..a74d79f728d77be6c8c15ca07e92a01ba7da2c39 100644
--- a/docs/users/_build/json/roles/editorial/editorial_administrators.fjson
+++ b/docs/users/_build/json/roles/editorial/editorial_administrators.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "N", "next"], ["roles/editorial", "Editorial roles", "P", "previous"]], "body": "<div class=\"section\" id=\"editorial-administrators\">\n<h1>Editorial Administrators<a class=\"headerlink\" href=\"#editorial-administrators\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "sourcename": "roles/editorial/editorial_administrators.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "next": {"link": "../editorial_fellows/", "title": "Editorial Fellows"}, "customsidebar": null, "display_toc": false, "title": "Editorial Administrators", "prev": {"link": "../", "title": "Editorial roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Administrators</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/editorial/editorial_administrators", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../editorial_fellows/", "title": "Editorial Fellows"}, "prev": {"link": "../", "title": "Editorial roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Administrators</a></li>\n</ul>\n", "sourcename": "roles/editorial/editorial_administrators.txt", "current_page_name": "roles/editorial/editorial_administrators", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-administrators\">\n<h1>Editorial Administrators<a class=\"headerlink\" href=\"#editorial-administrators\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "N", "next"], ["roles/editorial", "Editorial roles", "P", "previous"]], "title": "Editorial Administrators"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial/editorial_fellows.fjson b/docs/users/_build/json/roles/editorial/editorial_fellows.fjson
index b7e7df3dba2d9dd2c67ba3468f17fddeb693b78b..9b2da1cbb6f02046abedea9d92eb74de8e2a3b4e 100644
--- a/docs/users/_build/json/roles/editorial/editorial_fellows.fjson
+++ b/docs/users/_build/json/roles/editorial/editorial_fellows.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production", "Production roles", "N", "next"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "P", "previous"]], "body": "<div class=\"section\" id=\"editorial-fellows\">\n<h1>Editorial Fellows<a class=\"headerlink\" href=\"#editorial-fellows\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "sourcename": "roles/editorial/editorial_fellows.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "next": {"link": "../../production/", "title": "Production roles"}, "customsidebar": null, "display_toc": false, "title": "Editorial Fellows", "prev": {"link": "../editorial_administrators/", "title": "Editorial Administrators"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Fellows</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/editorial/editorial_fellows", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../../production/", "title": "Production roles"}, "prev": {"link": "../editorial_administrators/", "title": "Editorial Administrators"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Fellows</a></li>\n</ul>\n", "sourcename": "roles/editorial/editorial_fellows.txt", "current_page_name": "roles/editorial/editorial_fellows", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-fellows\">\n<h1>Editorial Fellows<a class=\"headerlink\" href=\"#editorial-fellows\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production", "Production roles", "N", "next"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "P", "previous"]], "title": "Editorial Fellows"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production.fjson b/docs/users/_build/json/roles/production.fjson
index 7ff3796be6967a22e40deed9a51780ac0eb8ba63..163bb326fb3e4e97c479ff07815de91aebfc218d 100644
--- a/docs/users/_build/json/roles/production.fjson
+++ b/docs/users/_build/json/roles/production.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_supervisors", "Production Supervisors", "N", "next"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "P", "previous"]], "body": "<div class=\"section\" id=\"production-roles\">\n<h1>Production roles<a class=\"headerlink\" href=\"#production-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_supervisors/\">Production Supervisors</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_officers/\">Production Officers</a></li>\n</ul>\n</div>\n</div>\n", "sourcename": "roles/production.txt", "metatags": "", "meta": {}, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "next": {"link": "production_supervisors/", "title": "Production Supervisors"}, "customsidebar": null, "display_toc": false, "title": "Production roles", "prev": {"link": "../editorial/editorial_fellows/", "title": "Editorial Fellows"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production roles</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/production", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "production_supervisors/", "title": "Production Supervisors"}, "prev": {"link": "../editorial/editorial_fellows/", "title": "Editorial Fellows"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production roles</a></li>\n</ul>\n", "sourcename": "roles/production.txt", "current_page_name": "roles/production", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-roles\">\n<h1>Production roles<a class=\"headerlink\" href=\"#production-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_supervisors/\">Production Supervisors</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_officers/\">Production Officers</a></li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_supervisors", "Production Supervisors", "N", "next"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "P", "previous"]], "title": "Production roles"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production/production_officers.fjson b/docs/users/_build/json/roles/production/production_officers.fjson
index 407e6d081dd103a290f52335b2e07f2e21c407b2..53e6aa9a4591a120fc521dc4c39e1607aae38721 100644
--- a/docs/users/_build/json/roles/production/production_officers.fjson
+++ b/docs/users/_build/json/roles/production/production_officers.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["guides", "Guides", "N", "next"], ["roles/production/production_supervisors", "Production Supervisors", "P", "previous"]], "body": "<div class=\"section\" id=\"production-officers\">\n<h1>Production Officers<a class=\"headerlink\" href=\"#production-officers\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Officers</strong>.</p>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Upon being assigned a production stream, produce the first version of the proofs following the <a class=\"reference internal\" href=\"../../../guides/editorial/production/initial_production/#initial-production\"><span class=\"std std-ref\">initial production instructions</span></a>.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "sourcename": "roles/production/production_officers.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "next": {"link": "../../../guides/", "title": "Guides"}, "customsidebar": null, "display_toc": true, "title": "Production Officers", "prev": {"link": "../production_supervisors/", "title": "Production Supervisors"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Officers</a><ul>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/production/production_officers", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../../../guides/", "title": "Guides"}, "prev": {"link": "../production_supervisors/", "title": "Production Supervisors"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Officers</a><ul>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "roles/production/production_officers.txt", "current_page_name": "roles/production/production_officers", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-officers\">\n<h1>Production Officers<a class=\"headerlink\" href=\"#production-officers\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Officers</strong>.</p>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Upon being assigned a production stream, produce the first version of the proofs following the <a class=\"reference internal\" href=\"../../../guides/editorial/production/initial_production/#initial-production\"><span class=\"std std-ref\">initial production instructions</span></a>.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides", "Guides", "N", "next"], ["roles/production/production_supervisors", "Production Supervisors", "P", "previous"]], "title": "Production Officers"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production/production_supervisors.fjson b/docs/users/_build/json/roles/production/production_supervisors.fjson
index b8909616f3e4b323f0f6635ead7ab65b71e53af2..ac2c69c597c0cbc00663d5c89fdd2b0be6c94857 100644
--- a/docs/users/_build/json/roles/production/production_supervisors.fjson
+++ b/docs/users/_build/json/roles/production/production_supervisors.fjson
@@ -1 +1 @@
-{"page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_officers", "Production Officers", "N", "next"], ["roles/production", "Production roles", "P", "previous"]], "body": "<div class=\"section\" id=\"production-supervisors\">\n<h1>Production Supervisors<a class=\"headerlink\" href=\"#production-supervisors\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Supervisors</strong>.</p>\n<div class=\"section\" id=\"responsibilities\">\n<h2>Responsibilities<a class=\"headerlink\" href=\"#responsibilities\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Ensuring the efficiency of the production workflow</li>\n<li>Supervising the work of the production team</li>\n<li>Training new Production Officers</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Assign new production streams to Production Officers</li>\n<li>Check proofs produced by Production Officers</li>\n<li>Monitor the workflow of Production Officers</li>\n<li>Report back to EdAdmin on any problems with the workflow</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "sourcename": "roles/production/production_supervisors.txt", "metatags": "", "meta": {}, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "next": {"link": "../production_officers/", "title": "Production Officers"}, "customsidebar": null, "display_toc": true, "title": "Production Supervisors", "prev": {"link": "../", "title": "Production roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Supervisors</a><ul>\n<li><a class=\"reference internal\" href=\"#responsibilities\">Responsibilities</a></li>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "current_page_name": "roles/production/production_supervisors", "sidebars": null}
\ No newline at end of file
+{"page_source_suffix": ".rst", "next": {"link": "../production_officers/", "title": "Production Officers"}, "prev": {"link": "../", "title": "Production roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Supervisors</a><ul>\n<li><a class=\"reference internal\" href=\"#responsibilities\">Responsibilities</a></li>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "roles/production/production_supervisors.txt", "current_page_name": "roles/production/production_supervisors", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-supervisors\">\n<h1>Production Supervisors<a class=\"headerlink\" href=\"#production-supervisors\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Supervisors</strong>.</p>\n<div class=\"section\" id=\"responsibilities\">\n<h2>Responsibilities<a class=\"headerlink\" href=\"#responsibilities\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Ensuring the efficiency of the production workflow</li>\n<li>Supervising the work of the production team</li>\n<li>Training new Production Officers</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Assign new production streams to Production Officers</li>\n<li>Check proofs produced by Production Officers</li>\n<li>Monitor the workflow of Production Officers</li>\n<li>Report back to EdAdmin on any problems with the workflow</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_officers", "Production Officers", "N", "next"], ["roles/production", "Production roles", "P", "previous"]], "title": "Production Supervisors"}
\ No newline at end of file
diff --git a/docs/users/_build/json/search.fjson b/docs/users/_build/json/search.fjson
index 6a85c32aa983e31ffdb0eba7c54b0557f9e0d98c..6693b05003ebad248eed6ee1b3de379d6c408249 100644
--- a/docs/users/_build/json/search.fjson
+++ b/docs/users/_build/json/search.fjson
@@ -1 +1 @@
-{"customsidebar": null, "sidebars": null, "current_page_name": "search", "alabaster_version": "0.7.10"}
\ No newline at end of file
+{"current_page_name": "search", "alabaster_version": "0.7.10", "sidebars": null, "customsidebar": null}
\ No newline at end of file