From ebb2359781dcd94c6666ce54b088ba0f9330bd0f Mon Sep 17 00:00:00 2001
From: Production <techsupport@scipost.org>
Date: Sat, 24 Mar 2018 19:47:33 +0000
Subject: [PATCH] Docs git error

---
 docs/admin/_build/doctrees/environment.pickle | Bin 4532 -> 4477 bytes
 docs/admin/_build/doctrees/foundation.doctree | Bin 2428 -> 2422 bytes
 docs/admin/_build/doctrees/index.doctree      | Bin 2709 -> 2703 bytes
 docs/admin/_build/json/environment.pickle     | Bin 4532 -> 4477 bytes
 docs/admin/_build/json/foundation.fjson       |   2 +-
 docs/admin/_build/json/genindex.fjson         |   2 +-
 docs/admin/_build/json/index.fjson            |   2 +-
 docs/admin/_build/json/search.fjson           |   2 +-
 docs/codebase/_build/doctrees/apps.doctree    | Bin 2612 -> 2606 bytes
 .../_build/doctrees/apps/commentaries.doctree | Bin 13321 -> 13240 bytes
 .../_build/doctrees/apps/comments.doctree     | Bin 12813 -> 12767 bytes
 .../_build/doctrees/apps/journals.doctree     | Bin 67275 -> 67047 bytes
 .../_build/doctrees/apps/scipost.doctree      | Bin 70269 -> 68462 bytes
 .../_build/doctrees/apps/submissions.doctree  | Bin 108329 -> 109387 bytes
 .../_build/doctrees/apps/theses.doctree       | Bin 5351 -> 5283 bytes
 .../_build/doctrees/environment.pickle        | Bin 348774 -> 346942 bytes
 docs/codebase/_build/doctrees/index.doctree   | Bin 4377 -> 4332 bytes
 .../_build/doctrees/maintenance.doctree       | Bin 2546 -> 2540 bytes
 .../_build/doctrees/maintenance/docs.doctree  | Bin 5597 -> 7484 bytes
 .../json/_modules/commentaries/models.fjson   |   2 +-
 .../json/_modules/commentaries/views.fjson    |   2 +-
 .../json/_modules/comments/models.fjson       |   2 +-
 .../_build/json/_modules/comments/views.fjson |   2 +-
 .../_modules/django/utils/functional.fjson    |   2 +-
 .../codebase/_build/json/_modules/index.fjson |   2 +-
 .../json/_modules/journals/models.fjson       |   2 +-
 .../_build/json/_modules/journals/views.fjson |   2 +-
 .../_build/json/_modules/scipost/models.fjson |   2 +-
 .../_build/json/_modules/scipost/views.fjson  |   2 +-
 .../json/_modules/submissions/models.fjson    |   2 +-
 .../json/_modules/submissions/views.fjson     |   2 +-
 .../_build/json/_modules/theses/models.fjson  |   2 +-
 .../_build/json/_sources/maintenance/docs.txt |  12 ++++++++++++
 docs/codebase/_build/json/apps.fjson          |   2 +-
 .../_build/json/apps/commentaries.fjson       |   2 +-
 docs/codebase/_build/json/apps/comments.fjson |   2 +-
 docs/codebase/_build/json/apps/journals.fjson |   2 +-
 docs/codebase/_build/json/apps/scipost.fjson  |   2 +-
 .../_build/json/apps/submissions.fjson        |   2 +-
 docs/codebase/_build/json/apps/theses.fjson   |   2 +-
 docs/codebase/_build/json/environment.pickle  | Bin 348774 -> 346942 bytes
 docs/codebase/_build/json/genindex.fjson      |   2 +-
 docs/codebase/_build/json/index.fjson         |   2 +-
 docs/codebase/_build/json/maintenance.fjson   |   2 +-
 .../_build/json/maintenance/docs.fjson        |   2 +-
 docs/codebase/_build/json/py-modindex.fjson   |   2 +-
 docs/codebase/_build/json/search.fjson        |   2 +-
 docs/users/_build/doctrees/environment.pickle | Bin 27544 -> 27542 bytes
 docs/users/_build/doctrees/guides.doctree     | Bin 2560 -> 2554 bytes
 .../_build/doctrees/guides/authors.doctree    | Bin 2886 -> 2880 bytes
 .../_build/doctrees/guides/editorial.doctree  | Bin 2641 -> 2635 bytes
 .../guides/editorial/maintenance.doctree      | Bin 3359 -> 3353 bytes
 .../guides/editorial/production.doctree       | Bin 2699 -> 2693 bytes
 .../production/initial_production.doctree     | Bin 81743 -> 81671 bytes
 .../production/online_publication.doctree     | Bin 27682 -> 27520 bytes
 .../editorial/production/proofs.doctree       | Bin 7238 -> 7157 bytes
 .../editorial/submissions_processing.doctree  | Bin 9789 -> 9735 bytes
 .../_build/doctrees/guides/referees.doctree   | Bin 4406 -> 4349 bytes
 docs/users/_build/doctrees/index.doctree      | Bin 4937 -> 4826 bytes
 docs/users/_build/doctrees/roles.doctree      | Bin 2663 -> 2657 bytes
 .../_build/doctrees/roles/editorial.doctree   | Bin 2634 -> 2628 bytes
 .../editorial_administrators.doctree          | Bin 2627 -> 2621 bytes
 .../roles/editorial/editorial_fellows.doctree | Bin 2585 -> 2579 bytes
 .../_build/doctrees/roles/production.doctree  | Bin 2642 -> 2636 bytes
 .../production/production_officers.doctree    | Bin 3990 -> 3960 bytes
 .../production/production_supervisors.doctree | Bin 5136 -> 5085 bytes
 docs/users/_build/json/environment.pickle     | Bin 27544 -> 27542 bytes
 docs/users/_build/json/genindex.fjson         |   2 +-
 docs/users/_build/json/guides.fjson           |   2 +-
 docs/users/_build/json/guides/authors.fjson   |   2 +-
 docs/users/_build/json/guides/editorial.fjson |   2 +-
 .../json/guides/editorial/maintenance.fjson   |   2 +-
 .../json/guides/editorial/production.fjson    |   2 +-
 .../production/initial_production.fjson       |   2 +-
 .../production/online_publication.fjson       |   2 +-
 .../guides/editorial/production/proofs.fjson  |   2 +-
 .../editorial/submissions_processing.fjson    |   2 +-
 docs/users/_build/json/guides/referees.fjson  |   2 +-
 docs/users/_build/json/index.fjson            |   2 +-
 docs/users/_build/json/roles.fjson            |   2 +-
 docs/users/_build/json/roles/editorial.fjson  |   2 +-
 .../editorial/editorial_administrators.fjson  |   2 +-
 .../roles/editorial/editorial_fellows.fjson   |   2 +-
 docs/users/_build/json/roles/production.fjson |   2 +-
 .../production/production_officers.fjson      |   2 +-
 .../production/production_supervisors.fjson   |   2 +-
 docs/users/_build/json/search.fjson           |   2 +-
 87 files changed, 62 insertions(+), 50 deletions(-)

diff --git a/docs/admin/_build/doctrees/environment.pickle b/docs/admin/_build/doctrees/environment.pickle
index d3f4d0db6311ffec074c19122183a87a5f4f70fa..0c9b67dc6ce5bd09cda83e241c52c78098064d3e 100644
GIT binary patch
literal 4477
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
I7j(D%KP~MtCIA2c

literal 4532
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
IY1!-i4?QE(YXATM

diff --git a/docs/admin/_build/doctrees/foundation.doctree b/docs/admin/_build/doctrees/foundation.doctree
index 9cb04fc62cd6ba7e16353ec4e2abf087f4ac010c..fbe819e078adfbfe7d20a5c0d93d8c18778f4a8c 100644
GIT binary patch
literal 2422
zcmai0U2hvj6it&RvD?H=0;LbMQh7jX9}<JaL&YOV2q{v8)B>tR8D@9Ko*}z4%Y4`l
z2nil4wPpHHF_riO{7=r^^=|Bdge6Pf**j;>J@?!@{_XnP^WjGGiKD{g!K>1pXj2H6
z;(!(^p?&%@J^VfWnjXY~6W%L5#oNO^d}59ELKi9Se8bCtt$qAWXM)WIE0sP^XYqDk
z8h*}1#Z}38QCQ&|!e7LZu+~^6bZ!d3r?~y~lP``RrFhE(UkAVXCin@x85N<bnZn6d
z^U?u*kAXJWaj%TV^UzzKi;U;zIN^rmrDvs>i87sT$L&I7VTzz#)>2IIv#~Ul7`t56
z#`*CaJL}r@&&zc-`*@7Z-Iy1Z(&LE<x@ZnOvCgNsCG-raBj>HES#B!QkI3D$e2y%5
zR*E8>UW>PDQL~9E1q-%hUQ~6-y@2RgKmPEePoU<3yU?C5m{e0);tTler6F~0EM>)3
zK;Kn*RU+1EDY-66VNn#~l4J9sSSZh&=RUYgCEl?jH@1LwHEM_oC{zTX>lL{QdO)(e
zk~?VynCD<V^gLs8Rd|_B2XWtt-0M)W#l+Z(GJdbgR%s_J6{r{EMLZByCJHdSD20<k
z`1G=IqgNjKv;Z&TK4e#VVlELIm2=N#$|-LwSRaT5iYL}>0fxr*wcm`lSfLyh0`<`o
zMJ~A2m<fK-j_8sA!>Q21@)mc*gEveSthQpJ7AbBj6llNXdK&nYfC?zEDRhc^RM?Dz
z1XU;Am)_Uz)A4vdpP$qhUK)L3>~vg+*%*;-46iqN5{oIiODsJ3rsgQwi#UY2U}|2~
zc)w>S`3m&i4%!=ou2sTM8ffXO60jqR23=uM)TX9;uHq2lr(l2yjgKbAc#Q{u=I7L-
zjtbR^Q9BU|h+UDz?!iJ8>%)6g=D<?`YPh1!MvC{YwCxr9$PePaH<U|vY}`hl*b8X7
z>>OB&M#CA(PJQ0b9V{%%)^v|c&r*E9-6KlTbQ?_QCCht+BeJ3k*}9!Z>s<r?HiPBZ
z!4PpoMeMUA8lyS48lwp=wSrez+3DO9GHTT-Gi9$(Lu&v{P&(^L)T7>9tisfTX_}ZD
z+(X(dP(f(GZmFVK-&sy2c?V-S)S6=xr8*$VK&*M#?Q+D6?Jgw5y*yad9FA97kb<jq
zqhsO`*|}fsISz8EN(^O<ljKI+CEaM0_Tzko)lSXnj3l?@w;(Q`g2N%EZ!YP6I9^W6
z#O3$E`T^f;E#UrTz<1A5kk{lEh8yuc-IVef05{~L?p&$m9cg6QpR@`pyZv&}ZUyt}
zPtZl69S<LOjP5_q)mND7>3M3dGT{9ZhZxG;`2Ua4ka77+{t<UQpOU;uJ_?yUZ|}l?
zk&3%gIgE>oD@m^`uTb5gEalH@Sg-##!FJd4xclYusLO2rlCLh8TjqbuNQ^0o&++re
zkcrEm&1xLx3iknu+`6%#yP&&2ci=O!BMh_Og;7&9D+fv!3Rj0`a5&}`?Uzr<2^NKV
zBVUJjv$s61Aq>>caIJSq&=&oHoMF>j`6i(6xW(jL?T~k`v{uUiX4+phaf5k?CWi$*
z{>9*aDV9u!bdtZQ+YXbnGx_!`#G|#?wt0}~sOz1jEzaVgy*?;~#-(_kbm0&cH~Ce9
Q%YNF3hpP-b-XS~r2QeVi{r~^~

literal 2428
zcmaJ@U2hyU6iu6t-A#5kA5dOsr9QM$cu0l{R0?lUs0x)Lq_n(1WqD^jYttEf>W^ge
zfCLXnE%F=Y|8nfvnaxIsmF8hRw(mLjo_p^6zV*-B(MJ0DX`ymwMP*K<Dwqj=7#C_L
zZTLHU@<;eB9QzN=RXtM`DV4HPSw=J~O?Vyrz|y&-H4FTfKQeA+tgyIDNfK8L4*MhO
ztm+RMOSKIzZuya>mqt0Av*0&^AI1Ils!3;#{eTN&mA(pR{t$QO+zL6rZ*tKnW5b#A
zL(LkcEz{UBxgH_G+5tXMr0|DpsEUXipr#Ggh7mwCbdH#ya_1(;CDe@=tL*9QSxu!W
zm9A6lqyF#OWushJ8uQR*DV}ce9P|AZIeu`B-ATvJ`AK)W%`@=s7A#jf-3Y=%QII~7
z)7)u|YLR6&k+JLf=u5Rrt<_@Y>@vl}!Zj@`kRRj~HKt9(cE7sQ73kaSm0{XsznYx7
zMRqQ5Np_x#A5o1{rRUiaJGpq2K|Lm;MJ;4jDkqBs`c$KAelz9((S|dczgbGi`2!&f
zp;>MTv@vHkZ5efnN&nJ82$4VJ8-8H07pYyzbE^`Pg%`K^fPd|WITuxdj3Cl6wr@j{
z73(+i@6x{K{MqY(w_7jSA`0Cfp7%0a5(|HZq<+5lUoZU*Bov#3|KMhn@9}ef5)poe
zYrn+v1)dDgqu0Ulm;9;klF1+QTYS^a_&05H0nknao&bHnw$_3?^MmKhZdf7emvA>}
z0hIp>;1~XL7dfIGuQu<~9`FOYhIw^_tsgm99eKERWOH?dKj6QhPYtuNci}6Cz0s6f
zNy}sr{LW9ba*$o`G<&V&2rBv}wsuA3+@VED4s#0rHp=RcI&F}sqqx&VN10wyEfET>
zp&6}ldfKoi>Yt%dIig?%??i*k>S%CrWwKmZ>i^7-&|FRQk44~Pzg@7In`7TS<!s|D
z!A+`&QJB_B6HaAO!3j`a+?+$?yGsU6S1}++CjpX0^o;P{f7}LS6-yAvrLdfI?RVz)
z3s*O!G0YW;Eb4g20b9WK7!gRCmb6N+t;(;__uHTYyX4P7z|t9REi4Z&hJM@{C8^j2
ztI#8UCs(o*k<v8!1X<Dbw*^WvZHaX}gWrDj^4ZA~SoEAp1`krnbHPi<5)czDq<?~}
z#*0ZQs@6#E#Pr911i2uV)lEe$ia5mj$-_@SN3cyMFMwnO7tL9$W_ahPy3B7>O~~u1
z2NY+^lP4zzG?1No#-blyAuMOiBF7`R4ueD1O-!G;l9nzA7js_WL5;R5C2{m9Itk{(
zdVwZ!Rl0gbZJ!jv&>4vIxx15BioPMNrlKOWfZrtheCNlJ^o*ihQ2_ovx3)1~W!dHB
z<!N(exsu5+3wDuVr^$jJ6O3K-NayZ%*V*0>8vm;mG3@d}7|~YakSzoT07i~8U8T4E
z9!4zm8i5zFK?dE3;E(-1sI^|3=WUY^)1VSa;RkSJr3+wd(5X;^Xd5WW^STnpv0N*{
zcRRvXDST51X3IpF+qweTR^I*4j8gt6Nkm9YnDph)A%5rgZ}c3rm<k{KB*Eyt1#N@D
zVPWO5wZXtbM|anSd?SzkAj-|4?KwK6ilqH6r<GmhZ)|FOtdO@3Upywfhh@i^@s#>;
eH*(Y5Ig5VoC%q}9!G@U)-K~8z#YyI7r~d+wbH%9u

diff --git a/docs/admin/_build/doctrees/index.doctree b/docs/admin/_build/doctrees/index.doctree
index 077e54afed6f14d7baf08a7d87e5e41e5dca4176..dbde81f4d441e28b4c7fb5bdf66692f86f6563cc 100644
GIT binary patch
literal 2703
zcma)8&ub(_6wc<?%w&_v4_)`LyATh89+FY;5EeYhf|o!LT$Kf5TisnVRi?YDtsgTJ
zWI@4|-L=Gn?M?CS-T%+;RZsU$=AZ@!($!V(ef53seXqaU{OyOGwfGl?xz4<kg*{a|
z=e7=gS}3`4^{@3i-`7v;w?p4@=cJn8?P0flY_xJ*<#pKpj1?Y7yZyJV_9o*=A=OoV
z5$<G#W>*O>nJf~P=Z0I0?a#xI8>3CaRi<-<ufx`-k3Tv&tHZwbuJUgAjdx>uGt7Ni
zB@&s9VueNY-2||Kjyb6no(ImbjHfKSLWUi|3YQdo%8UAZD{SRF^%HFBB@M(nd@vHa
z<RhEON?SLY;bc|W?s>7EOy3*f=61yLQmT<uIiH^z>*}z<)f54T))`qPnJ$Ss!gbrQ
z87{!mg6H-5t#GH}RWg<ZPrNA-$IGf<j)QNkpS<<%`ylebUMt7uiI5Xf;D_*=g(hNl
z7L4L3Lf@BanVqDeQ81Mk+&~Y)lHu?npG%im$DFsXNO;ZgOq(3ERge$lONfD>H^o>D
zdO(cYf>~iWkY_+Xa4bz`GIydr?}t6hGpBr+%*Wc4bmKSTZKbl@kTx9|&%*&PQ=S9a
zb-}IR+|@5)Av)>6PZQup*aPEIjrFUDk>$)KQ)#8s2B;7C9J=wF6#<0Wbh599{Un!`
zgn&M3EU5tYV;!MXlqI-Cz+l1^H>`;}WZvmS=1FDvSkCLPE+Nof!PLaF2?ff*z&clT
z*d<|81`wo9I2O)T_TgwWo6SzEYbUfi)n+ov`E-Pxc7!sI_aqb(G!~ybs+)>Ivgcut
zqbeX-S>gSz8D~qO@3*0y)@WGC-8hC8t}GCCNV@@-8;BY;-L)kH5#M-?nBe$mthG~k
zK+x=p+S8Iy4H=c?J_p$)mDmH6P?>bwyQql;PL5E6C2rR0@L;85SIS4c8TOo}yR>P;
z7W%|ogVROlptQ&pE+9L#cxO3SSjZN;$JUp1xYwNF1&`f^B6K3jx(G*9iq@w$%V~JC
zYf!(@Q%)=jA`D5y?v?~&IAcb^l~ARIvl1)YZT0w+TD44d(J>TZ^}z|GGmc0->WV8V
zVR$H-xMznsP@8%ZguHb_=5c*{VMyXG9N1Ti;SgQ5Pm}>zeCV}z#EY$Vix0b*H_#jv
zFBK;Smvy5w;fTt)TkSCRGa(E3u|g)X7J9@RxoGF)OQ^OhMmcJ+AwCCi@g(Zd*yc&J
z#gle&G*-;Smx%fme(BQI<GA&Bb?X<GwHLR<1`LnxaK0|YC6cU(vlfd`;;zu5=&~<|
z7wvg5Z;s+Nn~%|1xJtP9NhUvrxgUQ>=Dm{oSsiB_B7YkOu<Uj&{Oci~GVxOU6nc(L
zNQPRR`4lM!;D}8Ot3*fP|AxIuHx|#r;8C2b&OWSPVf#hATz=8y|6K&}bIjW(|Ii-8
z_&?bS`{+YdG(VXEXN7seNS`GFF9=B3x0R4;eu{a$_%P@#4zA|-vr{DW;r}V@2Lo>{
z>`9dsKIcN_m@=@8UdF1$kltOqqY2Tp#hBo?g+m3i-JXj&>#!AvZUh>3VrN^eitG9X
zm00MPY>t6Oqi8*BP70k;Lb4c|ZkP3i`1{A2d6dU?<oTs|1or-Fh@^l2@F|C;^zYY;
z)iB5;W+xh=ftb_WY(F!$(Ua7=PvKzgHZqX7asaFnW7Z{b19&{07f+tn!id6#+nqCj
zeaxM<FJqP-)l(B#Oog#<CT1{OmObS474vEGf`z^1Hjm*BVT1TOa`?o<1kM-u29(5I
zSJ8vS^umUt8~Yk-!PSPXvn<-;BJ`W#O2}is;(6R|2Y2|+Sp~Ono3(JbjIPD()6;(d
D@!m$D

literal 2709
zcmaJ@U29uM5VaG3NVX)$Zqt_}5D0~oBC7$HhP;H35(+7z%}1f7VOia~(r$9^?(Obg
zTZRVOhnA%5TerWVf3s)y>dKNSF$k>H?97}wXJ+=dt$+U7+em+5kejUbs&L2J<if?!
zp@ULrAODV@{T|=OyWwMZUQSHGrp9<}ykJ&LU3?Y8uIDq&OA+N}ICAyGdFA2EXhx?F
zm%|aSy;)v#o?9QEZicSqXU^0%6ESSW&?S3+UNv`axJ*^X`P)1%mA>63#L06UyU?+s
zGS&+l$DzOKKP9z;>{OnDAFkz;Q`SgnP;u)7LxPUa5D`GGUq-k{bc13|mtgk2<=Rb+
zEmQ2H<<~W5-AwtEYf~e--Q*(=LJMt}pbgidxzKN~HYG-~d%4JrT|f^Vm9u3H2U%?`
zh+>OEj>F+<F_tXtaqq2~)IL@BE*P$>1`?3(W(9YyslxX1bf@L!;pn9k){S1fjMwwg
za|I`(=b8Er^c)*I8!f0}r}stx<3<VBNa<Y6kFE1DTqW!X)S2+?%|bYJxCRSlMdle4
zF%v$SbX%RIZ|UOODDTLPu<Kw->@PLBRVXdu(<^dUJ`9~qsv<`%5a=$<x1qyAERE&k
zWcNgV{VL+utrucW>JB#+KyE+!AD#UXllbNSht0wc)I{APzo{o&?#u7x=ja)E523!o
z=SzHs_>5k~T0WDHLR(sSA~)sLdV++yaKUGmS8_GwEkOGzrTlH^J~rATihB?*@>)5B
z=bxMK*@weZO!=ccNpU-wDJxU!d?oA{QD0NkaNsJb^!%9T`C>HedXsr8)(X1=`zmF*
zFMBC==qsHSbuOgJb5Qa=?6m(;C7?K7HJu!K3(Ki08U^l6DV;{`JnSVJozcZPymU%F
z&qd`WvHmP<Cyk{7hpky*CNSAWiL6Sl#`4!cBPSX{N7v;<Sdqu48^i<gLR=J0A&9gl
z^Zz3)94tT&&p=RxzUPTYy4w&a*6$ziCGU6mD)p)E%@vF=C%jjBhJkxXLm*AysZA{B
zG3@-niyAnVa^G(nl0o%vXzCSQ&uUCBmSJkga0PV^M{WBsYBjQSG-?ND+-iiv;IM+1
zxIL&uMbiN_(HWxP1iz^Y&Ptm6bkbj(ET+RabTN7=8m;pvdto~llX?cbTc-9^?HN3o
zoT3P8jb)PSyg;!acX-Y)2lf^SYFki1fKKePIgL|rccTd?3XxJ^XUa>~4ySQA$m_CV
zl@oPt*t{ek*TfuKLNJBau$mVsZLqZhKWvjC&ZB$+0G?0aH75aeLa*5&tPrQ7fTF@q
zX7p4MqybG)b^$kBQJ`ed0Bdo^u>JDIli_{ru9?sR6WXM81YAl_kz#^{^7m0ya?F+@
zzfR?+Zw$3yUX)eAJxJ`}eE8`XCkS>`=u>3U#e&HMu^Hcmft_ZTSW|kn^hl-l)8YN0
z0}NCLqNi<fj^2_&c+|Ly))LqsWkuz4=i2i*lWHale8ACGVKlBD(X_?tTqmecr)Z@M
zXa_7;j!yt&S-b05VfY&+O0Eiq$zic%p|E$MN1!JhbddnUZRvgG9*jn3XJ^ONxtB(#
zb&`wI5iH#(h91Lv1U=I3zMJc4F9}Wl+lUw&<y1M<uyH8n3hNQuxOOem+hHGX59pN=
z$4J-=yX^v%C*c;<TCP2GnkHec0uw0VM_5|M=E$uQSaLd}aYK40d9Et4M|52PzS#oy
z#^AA~gr6qB(w7CmHu7G+C&=X|Ng_&P|E4EZoAJAFaH;2@#YB7z{glRXwxDgWTRqkt
zwKfoVFmZET$d~FEu94gv+FqhV3IZMWBrp6${d%s%D~|nA<0<Ikd#n=LtB-i-wGWcC
ao5wWkLVr1w((Zo?VP1M`(Xy{6$NvH5DmJ<R

diff --git a/docs/admin/_build/json/environment.pickle b/docs/admin/_build/json/environment.pickle
index d3f4d0db6311ffec074c19122183a87a5f4f70fa..0c9b67dc6ce5bd09cda83e241c52c78098064d3e 100644
GIT binary patch
literal 4477
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
I7j(D%KP~MtCIA2c

literal 4532
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
IY1!-i4?QE(YXATM

diff --git a/docs/admin/_build/json/foundation.fjson b/docs/admin/_build/json/foundation.fjson
index f0358b1f5..b37300c16 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 fe5cc567e..7747de9c0 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 2f201825c..a061b3fd5 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 680740b41..18633afd7 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
GIT binary patch
literal 2606
zcmZ`*O>Y}F6trX6l59)<XdM)70;DK{BnWJ^K+(9l6hVRZU_gg9NlyX6-K9j<yX2PS
zTJj-4duWiLyp{dG9ddW|Rn&kaFZIOt-psrqfA9SB#r{_ObHhxfl@+<UkSb%wyIxo*
zn6&<H|Ktz<)<1S9w6bcVl$FXdqS?gwH{KmsO{JMAT`=v(uCM9Ls7j~IyDjeq>+x@~
zv1X;xHU^)W+aggpSp*qNwe?q9e4FpMeQK>1No7$_$iFLTfq#*6M`ZDHug&z`h^vB)
zOe#uc>}bXkT9#(<+^mzEuSRIgj8gQNP{T$c>OvcfvJ#qJw>@>!oElT->Sa~gCa&D+
zqFaJm44u|N-4GFqLW7;KY5QT^VOnVo97!%D13*2Ik*3XUe)`t)&-s??8kSn2<Pz*&
z%0-^xhv@e)B6h8?Ia_?spS<x{?Yw03z>w>_2uc6+ktyD5p50zaLvGK{tAx5vEaB=7
z@9}RU!d*+Jp>ofkx)w`*#)m+gA0xqCyiW1@1g}ru_=-Q{kE#TDd#Nf)Rmp6vAa`U+
zF68`zW?3Vnu2rekY@_hYs}5@D^Kbc&{P{*g*O}%j@gLlwkZE3JY$Eaq@?&?nN~(9q
z^<$M3!We)D&<AnpSLjdDeDRE8gOc%l62EVrsTSDS9mF-uSs<LbJub2guzzqpSrrM>
zEQ283e#GA>ncw;k0SwnG=saVk<^Jl9>!!4f1djQ$Rsmh)j48n2nE&+7kNMBx?PYj-
z72aNlw_o0Q)}rhNP19`=0rKy`9lsn$#4r~??ZtmkTWoOD0DeBx=nGRuSD0h`GP2(f
z>|>vY>-#*Q3&uaEtEBH#iE+bL$j#7=-N&2b+s@A*6_y4#YL~!J9B+ii@jWrv7r4TB
z5DKQl{6u9xqONC{wL(q<YYTIlXeBL!?A+dKnpYrf;ZC0!fL#)nv&c1>3Cl@4$7A=A
zW~tH{vXuBelWE|74BxAYk_c>CD`xEOtIC#@B?wU&@)M@D(u7l)<$x1&f;=f4<E&&Q
z3F0J`&WUA3nNthb>tX%;;g?^d$YVB#AF<W_`O~pGL>1^;Mu<?vAQrLccZ}abc)=!a
zA$`u6g&GfFtSE{mc@X5b8wAUMLdiUMZ&=w&m7IuaFySeaOjE0(BU_pPjVuVY=Z3+=
z2|TC-Sz_+p9f3lJp%*Mb?J|wP9GU`FOn$52^#<urLptyk$DqlH)rE5h`-Ht*n^4I?
zEs<b(*8$`i)iOW{=ol@qa#$Y%Bxg4)5A!n=ausy%`jwrWU!EKEgH|K8OEL#JmD395
zOM;W52h6J*K>1`@hT9F}cN?WAEu9lCraZ?B)OB(tv2Pz{p5h=#ul;*>G-cMpO|fNB
zQV{$;9*XPz9+6C#Kmno}tcQA%Za^2n4980lhIbFRwWWDJ8qH?2i}KcTB`=hojxu&L
zLZlgacN7Is8dhbB%!@owxTJ{pn}EgH6P4S5(t6w2-Hl=t(l8wdsujz7cb4XgUK3VO
zkrSA+#?b{<(P1rSawCkW)w0iNj<c%fW!LR6d4p>1gMearOfQr|44`6=$I-^rc()q~
z#3zp0Dv0vlI>j4v#s6~m>Ph>*!8;B_863<U;>kl=$Ozakk-pa=ZI!}JMld^xNON1{
zK)FjA=i+A=Ih6`I0ov{K^fOE^4(6gnttV_QY&fQEWtLzJ*9$~%uU`IeehKL{a)@>i
zt!=-VfS`bJmAHO8DDm6D>P@PS&w@R*hHxxoCSX{W;64Oh#*ow1A1$sBuHSlX4C;sD
u+}@U87gqXU4BN&P08(7Jt-$!V!!>MDUu)pbd%+9p+so;iC$|w*a`7)t^b8IF

literal 2612
zcmZ`*TZ<e;6yE#HUS{^95h1IHC?pTNW6%fjEiV#S7=$Fgg`&E<W~#E?)oop7XM}(O
z4OuAjVk^G;Dk38OKEG4l(|bV|hV4Fm>Ri9`o%(L$=leS=@h=RsGWAa7_EeXduyyE@
zpb*;CKh^hN)-URNp{IEvRA%uKHh5J*tNCZcA@{DFl%><96U>N-t)JE5K<P{wkvitM
znF<$$N6v6<C#5M^A*|(7c!Tbd^@(-LA&62l@)Z3X-VkSG7~TgrT|sikE{degS@*%h
zrK`_Y!Zz7*iz?cay|E2D+&QBX@1p2l*s`TJsi?!l(Nimo9X+=x_w&(X1&z_;RDD%i
zcUqe1$fl~oGn+jap*(h!qE-pFVno$AHP+Rkm*(8sCZ~Spt0og9xY<4R6P}(gYqU-U
zeOCL>x57E4r>N>-*NllNwG%q4!`9b4_b_|a4c3M&?}nY`k$IEX<8WXX+VMG)YASR5
z5Y<Lr>S-O`E4{0{V?rZx_+rAC(lE(&mJ0(X7KKTnzpXM>Aw)H=!wRZfiHc2BF31CO
zqNsB2P_RDaCm(<E8R8qTwA2$djcT!@Ta5q#ZD-I%LyC%C98cJV%ABmv`e8`GVb{E^
zDKh5Dlu?y(rO#22P2kWh>afo;WqE=)I@`xh3jdeU0a>wVi8KO1Q<sM~Pr&-qCtsd?
zjt`W51=9uL-XhjL94d`txtNK(K3fX|3p8tAusH#^K3i=L0pT-cl`9PnZ34x)z{B0f
zp2$VChoqfkOL&aKZre1<5!wf$NJPf0Tjat@AzXbKr!rb={ar$94g?CO01KmePEoE4
zJ;T5K%oi1_tngXM<^>^P03azn!Rs>I9m(@9pUtpq_yy2FCCy?sW|GqQ3WI_IZO8@)
z_ftF^QR<k+oAC^CuBRSDjIw1Y?wZgw$_6Vm7ZH%*SUOkPFGeF*mLM1<+$2tubVWV_
zC{gv|YH&O6%vRK|%Wx;nOMcEo!Bx(9mKo3nVtbABDC2H!#$iY}?F>-(hhnZAiprh0
z%QkL?JqC`$uyG<AXzkeoY{9<qU@r@g`?ux<81ZgG7-@>!Q5d;+Ck}?vppM90%W}R(
z`zXHatr{wQef}_L(e8;=n9kt^H=3prxDmX7>Fue|!te%H+whu#Zqjo~y~S!vHsf%7
z)AFs!mJh-n)#j=xA1s@4adB~4Eu1WMY)U3(BWPMQW*?O8#N5$DpcM{ok2-$6nobPC
zTOj$;WT<KdvI2AzVaF#SvfGPV_T@_G5rC-PR}|*>lvuHr4h*HVpb=ZLvAiqa#nzGU
zKda>j`1QCv#=np7>vQ>Gq|8*R9B|Me(0g)4K3ZCqbNNUv&er6&x2-Hq#Pi!ge@mia
z;~_0HxhmJgR>fh{)p90Z!rMyNc!DY*>{jWAI_^Um<d5=={N5+rC(!CsnMx0`z81zW
zaxwnTD8fEC4t*9U7Y5q{?8{?r6d1V;`?iuw&rbpPb|v@P6W8tk))@~Q)4WUo-hRR7
zXaw==TIdmTQa4Z`;GFi<a*NfkfUtu`;*&yIi{{uU9YpDKti?z%q}Yf$ZY0rR)M`aM
zdLi*{6gw$sNMF?gE0I^tpi$eXp<z$yH1}BN*eNkK`Mdl>{we>Gf6IRaH9GV`vk7<z
zytEPqt-e$l;8kDBH|^Dfpb>T=C)rZx3w#1X!q!sJqf4Ix3LCMNZ{)A&7Bv}-o6#qq
zi1u~8d9|UBZPeZ#R>NNE4S|70c#cUY>~`aiu8kvPj&9t4y3@nu=@w<<&~G*h9Sl1e
zO-;)|fb446P8FCcwgE|CkKee{#H~75sx-H(7od>kOvdj+fEUDj{c1J19vmsfTFf{F
YGih!mF!S~;Z{00!3tG*s&nKt<0v;b6zyJUM

diff --git a/docs/codebase/_build/doctrees/apps/commentaries.doctree b/docs/codebase/_build/doctrees/apps/commentaries.doctree
index 05f7343a6f0579886f24f01d651166e0158b723c..129bbdf8522b837ea2f9de115a5032b31a3cd577 100644
GIT binary patch
literal 13240
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
GnEyX|7BN5o

literal 13321
zcmdU0TZ|-C8J?Y;>&|U=U>9*&QW}<>U6~os6$va7g3;iH0mDK_WUW+ppPo~-)m2Sh
z=0aRWQ5?*PF`@8DqluDuNr=&y2t*PM#wbP~1i~{$-*kO3Jb`}yId$q(_f+@xkiD_V
zY<E|m%YXU)+c|$fG4kxY9~+YY#B3w1r-|#wOF`IRaV93{L5l@R_Dpv4E7{p>K}<xf
z88|I`do~l3k+U9$X;f#K7|O(Mw?U5=#P#*CMbn(fW${uAi($=s^s~)O%*Ac)1{+IG
zqmgeliw)~`?5+k*l18l9kdKRlX6C{%Ct8hfvW^`)vrg}hW@3+%B#~Q76G_s77**7r
z&iIrgM(e&4#~GgxW1u4SLFZK!w1Lx_Q$GXN;_P%L#^o%mhxemRH;R+&X~mpcb)uR2
zK5c{D4Q(W@w5@kf#h8{%Yx$v=Me(v1*PV1@`9T+?E<adz9|+@QDU4Q^<GS0%dwcDc
z<uY;0x!~HHw?hvxxC~aUuxXXYR0x;v;=9Fo;y{w1kk5#TI(Pj>!~*cMz^BEW6txos
zVd5li7?fo_CRw*KJ`X+e4};&U@pnD`uEpQM(^<-I;D>1oej`81kKo~u7&*l@2qHqy
z{(7dsGS+smZIbbi@Nqto)*OBZpA#d#8?bC8t$~(lMGIg+#A=j5=~q{AIT%@YO0sV4
zu|!TAD7mXd6hEQpnUwT&5yL+;kT~wk_bp?>>~?>}Zu4?C2noz5Eb?6-tt5lFF0>EE
z{-Z<&=~<anv3hysQMq!z^={-mXD1(PIPnZ8Uw{%_<r$!}32l~xEo_FHwKqD}W`q~5
znvpQ@H%m<L38fVRXbw&Ssu*D#?FcVCY55sJ7?54b5&M+n39xIkpaFBTH(>MI*A!ED
zjAeYc?vm|~;-lNhfCFp>ug98=u;sV`Twa{udA_|E$2ZAl8-8J8&1LI#I6i4SatgfR
zDoZkPovmC^TxIOAA-Q@z6Z@QYyK_v=&5isS$;OZva|3Bh1~XbH6_zVzG);?`bS86B
znDCEtB~N@_d8^Zz(Zx@VE}m7kyOo=;R0%0(T8t2cw@Xk8YCH(tpusk>rwa*9&~POp
z?VCww<6+H{Px<e}n3nBud$U`Azb0}QfC=q6>S2(S;}elQkg@(ztu!Pi$v{>kr_D=T
zh)3_XjAw_(MJ#iJ*m8W|N;s1bux(84*s*e7UY^l*R+-fdBYeB+uCc&sr!}BS`rD;`
z=5d3#4B-Mmcr6FQ#bw-p>kVk?O$Db{`H7ReWHcC6aM=!LGP`jIobrhb2taU!^-?&$
z3+juRO^A+dH%LM|jr@4wsI^cPKuS7=$K_!I3B>XK1D7f{KuWQaWRAwQjF8IJh$k;;
zxbH=tiqQX%TD^lq#1!9N(5_k=3Hi>K3+v>+MVchVqC);F{2l&#Q8GjR-`tPpb~vlo
z6N^T&)f7o}xXGQTqLdxY4S;q(=kNpYtJhTLWrchXJuO9y(UvILS@mApYg|#Pm{AUA
zr4ZTv9>D68d3iIthK6z#=xn3MGKHmib2LY%U*0f%l3+MpP%=dpkn5(eZz}IE(~MH^
zA9N9uSai%V^d9M;_YgiwH&LSe8=CSmjJKx%{M(h$Kd)qpNYNwMds9RQIi6Cy=ik+c
zG_julK&BluYKI}7Kc@)P0sSZ4d{sno{)_X)ZSVdL0p3*z@Z-h10t6Jp-&Sz=(*T<z
zlPW_%#!&vco+yr=a?Y?=21qA*#9gz3$U+GG)cyBbPSCJW*CB+uiA8Q&jv`mx7jT8c
z(c$U6ZDGL0q-?y^LKKhE0~vp)I8m}7sVI+0?_MmjogpzEvwBy_q%oN5N*0<ZcM%(q
z*er+-s$_4mBFG@uQx#suG^!wAv9g2sL3JV0$Ofx9F<ai2FfLK)s{Dl)6QeSF8WN+4
zn;>|aI4j2P!y@NVhW7+5Ap?u|)qFL6YcbUb`D^s$xc3xZl<B7Q;Ka!>grI+Fv}n1J
zg_T1)|ChL~LRi*<5+nk4Kauth%a<pu$^)>MOMudxK_qb0gi|CkbcO+=sVe*tN~e1A
ztgD_*A}A4f5y18mXr)^l8pYFP6(}r=?q}vipp1+HXWo;g^}8nbOVP`Vm0;Gny8+t^
zgspM!CA=uGJx>o#oE%PTQtEx#9Ho+|u+?j;Y*mdA`N*=RmI>{__2|QL{rA9bKGX2|
zH^t}c1)qOVd`=Arse@&WE=jIRHr0pqp70XuJMdKH-IwL=OMTC^)R26Z9R_x(fXZDO
z*SO9lF{p8UqIy-T8DL}z1D&=eiGk-iTINE@aH)E+KJ~$sCAGoI0-SgTD)7lP{1tC>
z7)I7n8+h*!9#z?~tvonZEv1EsJ(jXKxyfpTuI)QD=9g*%?`^C|<-r8XgZb^EFV0=K
zst)q;mN-zoTTvEVZVlw6z$dly?W%ng^!w&T-hPt561G0>>^#`c7cu_h8k$j*0ek3^
zECY&y#Jh@~^{YNgo9gPLm#EFYhkNX6%8&W&C>WUe{IJuULE;EbLaN^irUWTQ8+uQ4
z(ECw*f`c{dPZmfWY=_c#v&UyE_MnJtv~p=m9I5g5R^lA2KE;%<Gl!TLsltgm<X4kA
zLi+AKQoJi9Nn-t<jFjZ*1}$<*NbfFkzIBSbv9<2vB+zGx<)k=9iqt`1P@Dvof|ZUW
zRv1vt<3`p4<|xprZSKJeI807(IOzMERy|^PkBc6sbj)GN<3zV<;mXEh8@MLGNhAg~
zHv69?mVL6WpsqCfja6((t$N=ql=x+OpldUuMN+8>`J~c8(&^g~)ZON$UBr-0J9iTU
z1pS+eS#+7H{A$nj`o#UmFM77rhpLX_z>@UNe<HXo^#6>s(i!@HNRN7i{#$xdWuku}
z;Z57ck*o?r@JrtJu<%YY05#qcl+IQwyhsAB0Cik|Jm4iG`2q8Q-_VRA5BNEK>dFIN
zplAK^fYPQq59lLsW8km$*xIB52Z~gn0}}m0?G0XuoC}{0ywySToA}g`4$KTpr%5`x
z<{0_>r(!R1c1B5;CM}Qvcps((AJ|=n_5?nu6M=W7)+j+JBuQd@j>IjoKWJJ|LRxoP
zaQA)E;~;DsL|8eREvJdweQS*+GP19`3AbYOUZk;gL^>*$HIAGol9ybpj^r0$OM|^7
zDLe1xLTHESK@oflS?xUd-UhxaBCouoJ5Rl>%SP2lq(X0x)%pb9jf)<5d(w0P!|vxu
zADv<MUV79c>>lqyQ;(o~=Smoq@8!IEu=Y+OuNrTOYkKTk#NErTjSCQU9V7Swqi&sM
z6jAqK`qUM5ZF<%(>XtUuQMaeCja@(1V`CF@4_3!qiHQDzw?xr}54>9)gntR2Is&gb
z52Bp$yu_O5TQ$*$>pK;@lFKt1yEGwKqTziQf?w{C-}6#y6nKAByelM0Vm(R2cNBt4
znClL~H$TY3b$PESdp65~IN=VOb)0p_l@S;|ieCGpyX0MU#NGK023fC3$#`!Rf_PQ(
zPMt3#ph6NI0hT`G_Zc|n$0zh%%Bv0hPq%4Obo8G*`;_NL-mh@lAt!lf>7BfJIwx<>
zy}!^w2-?Q-dunt4SGtVTSCMqkD<`0f){T*-WLx=ly7zBdM#dfQEn<SYKy^t@{K()T
zO~(5ok??m6(r2B$cA|mXclv(iPUbRA7Kk#d^ZrUZ(Xl`(_Qh!}#uX=enQ?K@pswDt
zXvuRMHnOfL$xiMPv-LEh)>J!h(p?dgX!VorS+ebST7R#4RmJ{zvsDXyyBUTF4q=#H
zX^0x4+hK(KE?W^Zbe5xs$aUtE$O&RJg0*b)OvmU7laI%#!!+-f#s%J#QXidnd%vXr
zqz?Z~?}#maj-OL9r6{X-rb^d)oJNqAQ!&}G?cOeO<)%{wEt1&zGO?PUU8GmB7kyZ6
zgsW~_Aw^D~B$}y7Pxg58sVzzLmLzz^BVt$hxh+ZOmZWh@(zk+6XtYKsX2pz_G7eyr
zTJ|(pJ&dH}A;DSI6jPSf)m^-(nSdN%Cvol+=LJR2wYr)swS-9MqNTE=AH9y4(W28d
zp&f3QnC}1)@vcx5E8l_c_<cpYd^3`5hz%TkKJ56o(I~Fg#cb59)4B|3tK$o>h-vcv
z-QFNvpuKd)cY@Uv*g%?$j!`j;R&7XvwL2$H$1R}Oek=w4VoaNDq^&mfys;>7aCeWT
zsYx7KTXSPK2?>#-XbnhL=_?jRVPt~{)G2U%V)UU?pI*Ez6VpT>wGU9^9J*6^lC<O7
zmzR?;MAN>@lBVoYr*7Ki481bWIu>ziK5LL2&43v<Xofj2crpnyYm>q^kdlk}LblXk
zFT3<;+T<z=7?dt)oB`WG(_OWjt`El053m=#w;?Dh@g_SCU}2KyLI*J0#HrcqZX@B@
zNp$(EmB8<HZqQDXf?r#)&(VkC1N{JsloWo6AQvnwgQU2d1#5Uw-?U?vHozWwi6O+!
zMbR3RCe6j$7V)zMyl*(rOX9TJ7`d0VYK;8NCRpMOeZSBbezFii_IQf3+ZIO6P&-MG
zwv6<qls}UFj2JMk{gVW=I25KyAFjO5j0_EleK;V7Uz7Ev?XxxJXD3I+9`5*w`8a1c
z+?ceO%N~2p6EOgNCpIOd+PZ!t@f;-4wQc4z`iVyj;V0bIznEANSHW+DQ3Gz5daQvr
zYT1N7I`P-7kG%ws7>y1b?$mea2PLy)tjO&&n#3?#u*EbMhHuBOL|puGVMXjGGa=v*
zeC>p_Fgu|JY&>5)eDiTk*<bfV=ZwwJvF+RV#YqH544SsY9Qv^n{B(i1YdiG>kM`v9
zCtH9P<INy(Hf-*$avy)_-X8HovYtsGrjD+g`WZ}`Rv|!3cUa6MA=#7$ycng{Rs8G)
zZRhQhty$XE*4Ni@8;*;FK-yY^tu13@40}5SS+`8oDIAF%gJ4F!Lutdvf36E7uyhI1
WOdOD6LK`!SWMI^0jIQpqw)B7gg)9L8

diff --git a/docs/codebase/_build/doctrees/apps/comments.doctree b/docs/codebase/_build/doctrees/apps/comments.doctree
index 6d8c8d5cfd8728871a76a56a6da32f72c560020c..39c8390f328671647f126c2e8ccb6f93de5a8dfd 100644
GIT binary patch
literal 12767
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

literal 12813
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
G^8Wy+1x%L!

diff --git a/docs/codebase/_build/doctrees/apps/journals.doctree b/docs/codebase/_build/doctrees/apps/journals.doctree
index dde5a3c31aee6b866ebcd8c629e61665c6d2487e..8ec2843e8d981d4215f6526f83af586384afa81c 100644
GIT binary patch
literal 67047
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
Tnauhn{?D}<9;g=0nW_H^pqY!^

literal 67275
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
Wf*nku<I4fZhBx4a#!O>o`u_q?GNOC{

diff --git a/docs/codebase/_build/doctrees/apps/scipost.doctree b/docs/codebase/_build/doctrees/apps/scipost.doctree
index d9a90f90806d2459fe1370c54f5fa1a1c4098fd8..93cb8cb7206043d27908d64a136dfe766419c113 100644
GIT binary patch
literal 68462
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

literal 70269
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
L)s&_)IsX3v&tyw*

diff --git a/docs/codebase/_build/doctrees/apps/submissions.doctree b/docs/codebase/_build/doctrees/apps/submissions.doctree
index facb1f265c7da91affac6b13e0f4d35b356493b6..e4c1a6e6b8cdecf784f880b24e189c2a295dbc47 100644
GIT binary patch
literal 109387
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

literal 108329
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

diff --git a/docs/codebase/_build/doctrees/apps/theses.doctree b/docs/codebase/_build/doctrees/apps/theses.doctree
index fe11e6a0792d390fc70086adab6da6003560d566..6df0f6e7d48550603bba6aa4689f441f66ccb0f4 100644
GIT binary patch
literal 5283
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

literal 5351
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

diff --git a/docs/codebase/_build/doctrees/environment.pickle b/docs/codebase/_build/doctrees/environment.pickle
index dca504247c14e8c00723956af63278e7c6a42420..3a216e7c1e34f45e2b7de010516855ce8377ea65 100644
GIT binary patch
delta 21652
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
I6X>h?e^QEtCjbBd

delta 23698
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

diff --git a/docs/codebase/_build/doctrees/index.doctree b/docs/codebase/_build/doctrees/index.doctree
index 7c9888ec4674b12cfcf41d540f6e27e32dc03a32..13c3b6d910f597e8a6159e8634f92a5ea48aa034 100644
GIT binary patch
literal 4332
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

literal 4377
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
NKs~+q(?&Kt{yz*1!_)u(

diff --git a/docs/codebase/_build/doctrees/maintenance.doctree b/docs/codebase/_build/doctrees/maintenance.doctree
index ac521bf860458565d20e5a152bcc329c093255e1..6aa9fc131d130af86238a004064416773dbfee8c 100644
GIT binary patch
literal 2540
zcmZ`*%WfMt6t&}rB-@f7t%IUXfMgLQL13!|ipI^ZD3C6UYEh)!1q5e?5(#t23CXeK
zMSy0}A_2H7`+@zF9#S)U6*VxBMcv`O_ndPN`TOqQ|Ma%fpC1%Dubq(gQt5)(;Jb05
zWXgrV!t)Q|eR$?iY3=k_Yp1kh#IUgqZ-YN{hAKPOrer3Je9zFS)wRi4@LR$6*W=$~
zW5X(KTnaw7cV(s}Sp-=}jSJUXe4Fq11L~X+S?y3y%)h5-iGPuEM-=IEzs>Y|$aTqv
zHW!t)Za8Hbttz|t-mH_`Z-!{g4s-OFQOkxU70NM1Rn9Jrb*L_*`AyqeCzsUPdCG24
zS8e{<pDmguD9O^vJg5^RVr}U2aAog}Z`L2>wJ`vfNTC=|>xzOjy>Iig_klm=TfSpi
z?u1rL2D&*HvcQV~;Ta<KoN$sYe&^5M2CVMBVY5h^Km2*wUic#<7I}Al+3#00RucF{
zol(D=3c9|>yZpOELdVfb>?-gVzJ;5g^8pCqCrEc6&l#RC@O=3;)chrXT4$)Do9nXD
zwJO%i^T)R0Ld`B|Q8Y^HIGsDgHrlwl-a`#N{yqPRzuHLXcPCP3;gdfSDwlP^#zM{s
zI9UNbQ5~q?=b|V8*(cvsb(t~43MkAUB<!qK@-BRerTcD4X9cSq57+m6C#O{cf5cyI
zaM=M|Mx=xz{>z_%wgC8kQ%{>QqVXeO<yWKB3{;JVe)vyAiw%w&EH0)70>+Hc6;K(!
zO2qUcG1%wH`aX~7f{e#>m5-e|vwqMjt{It;|9o@!TG{t=;b`oAKI72x$wp`zzEg{R
z0U~Szp&%j3K1uK?^<B%H6KVn{IbB%G*yuQIMezH-QCS1Qg|~cV0ck~;WYKdhnF_~A
zJANbonPIs$1+r9lpQ${;KZ0x3Wkuo$8%1SYd8lhw)s7%U7syYTG1?GLRUrW<B#b;c
z2K~HZ6^XhbwUNZJvXa!nv$|Nnc=GkPDDs5O;3jN!fBs_Rk5C2rRtX}c?583Y{f_V+
zR2Jv?4yxpgIY{piwuqu=CZqbceLv1N<Va@GIpfNHuGLsfuwie)6f@N6<fo2iK%<DN
z?D|2pU;?wKK$e&Ve@~#$LF@$!kT#4g!f<3u7%6#I!>KLOpT%_GD`~#TiPeSgM%TmS
z-`H5m;anoon{KezU`maOPy#we%eed8!ii+JOvYgu2(=1&@V(lNFRm^u`a!FS+9jEN
zN!6r=XOif{=mEp&`%pevmf`o}kliKeDMx37iwT!_K;5p?3j6lp!8vR^zX>1x@q{@C
z+ryS+MM3b#bfm5KdrS&pBL#?RupXFkz5!hXGae367{Nc{&Q<o+a5$Y#FRMGpwYt=1
zGA!8b5RrBm{BaUMWm#QlGAm`Ia7hvGH35qwBPq85MVCqMc;$W)qfnNaG*GQrKKk=q
zYI;K$yiF4Lroo8=R?*>H%;Z*BF;~k0rxJ(CoR>Yn!_+Odeh31}<srLJ3bBBSK_15&
zQxp7NA`qWADC;Q72kR7X%oYFOAIvB1{|4_Q5@m6oa)?L9w2%?7Un2dWMcQeNdx&6e
zoRH?Olt8&d8t3BY7&)B_H3r)4^z;f$FHX?1LanE4CR{vEU2T_O4Au)oZ@<2IeQ^cp
zHF8LHkgV;XnSiK(QJwi-J1FVb{^~tw9$!RzY7OB;s6xQ79Kme{x=bNwt1m6idf#ik
zHU;(KN$c(^unQ}FG=gp8bcPgHE*UWX?RbeA&u=4e=l$pf^GnCsnkTmrb$0nLO?L63

literal 2546
zcmZ`*TZ<z_6rTGeGn33kSA-o!L}7iHiHkmnKR^}+gRr~4Ek$*AB~?y$Ra=)#A}qL|
zvIFJ5*oyDI`oH`eey2LgB!dow>8?I?F5mgiSM}r0@Bef+(qHTsCJ$bf?oyjVxF&XJ
zp%U6Rzcrt{YF;*v;=bmUP=&)wJgm6VUTCg!aqrE=Qy#n-8RNC_f>|+g&5I_UC|xKk
za?d=sW8u@{nYUcKk+Bu4gmZk1*swiwA#+}Nq+~RsxGC!C+HygTkxOqq6jmO%S(TZR
zEk8Jf^v%^q?2<1(tCK&uKXmbcdv8@1d|G-G_nZlqih445?u2!N?_AEqbnsNcV(>Iq
z-x%jFjU5kMu4+89$>RaQa)TVmW!#Cu3O1M4`6lk?C3mhZty6@$EeLh)E}uFX&#xCy
zZ4=5bnh-lqc(3#r4LMzQXk-mRUo>&=TV4jZy=xJhXD=VdgZ7aHTQ<XZ;%3_ODU)g}
zOZ<@4PHFVGiSL=<>)@HtC;+jTu+~^6xh_g!5ySzX9QIvRuo@|<X%ja9axH2$Ql+2>
z%!{fnxd(0?tY3Wm>F3C=$8w`bYMjhcWB1wxB-AZnjlNVhy?CCn8&!DOTy<if_`_DB
zZ7Fi*P0k3VQt4{|vI}zBSrd<0p&ZYU$I|zCTf+ZUbV6PnS|Y7L($wt!`VM%1{_LxZ
zFYtk?ui?6)VQ|Rx2%C)ctP~SbHdkA*=Rj&5DmEn^H&>hOCJ=q1obtwE(=Nzd3Oqb)
z{fSZ}e<<2ZwxGu_9?qLaHNyHtRGBE4^RrSoDTHrs)2JqI^LV$gnu3Ue(L`F!OUiOv
z=n4KE7on<I?L;UHn^wex9*Cs$2(OED4<s*__3Xw&%WuF2g0x80*ilYXEGz&8+fWUN
z9>#b$qtY>y>-qFbuEznh4A=^QyCrl3*x-f6BM~y5OYdv<<zV2Af$AvXM`@^}ugU>P
z3Dm2*`CUe5uBLw7#s_(6_%#!lwUY6ouuu==_8R3;#ml)F#y;_M>44Hd6;tH_D)+%H
z+PE8!7=#bQ#z}Kvb>u3D2Kzoh#2g|X-<uO~B=`|=qy>4YWEA3^G#E-lL6U?m;Czkt
zQGTnf>MOlEe;Bmn_rfVmXa9y<O;ZWp2wuT;cPzB9yyaCFQFEwHeodv%xjGk{VLV^=
zd~dSl<9I~a+%@HcMN@8WZZ7MYmqw?i6k;-fr9)$mq1;|fJxv5!;Su(1DYJLei6M9k
zT5oItRBMP8sH2EGA&W`fUN*8LH{w1Ki15CXFwe)NijDM8D5V9B*g}-$L-{U_BKiJ{
zMt*?bK9}eC_Yr;_E<a3?nM+lI4jKabNN&g{3(s;YpUBzOmi*zqmxYV8zYF%yMKm6M
zy>iOQO}QQSY7W=FkrVj}K{w*gGk}5Y*KL1p(vc~n{8he@KZT5k48|P-%>+pIN>YEw
z+3-JeipNkqbX{EBSYFrAVxB6cG%0#KcC}P`dI|c^PwoBrj#dAEEuF`macMG8xl{2e
z+Cpl(757O;sW&e`u9KCsE1hc1FAc}}#p`w|2xCG&9x0ud0Y@+n0NN`5POXR?2w?`L
zfO2fa-rPv40t9Go<(u`31NAT-B=K-Ymor$Pm2q!j9{}KI=-F-p`;Gh)KvElk>4ZLo
zOw3=m+gBGmI5y^|{boGMgQa${#G@hE#KYyB0?=V<>e<?TWx2b**gdDiFm_t$r;YKT
zAbQWm0^Hh+-CRLZK<0GP;lN$HgQUgY!lb<wy~M09h9`aRgI-X`)vHi%HMxW|5pTjN
YnNfRvfSb4PMO)sw_F&cC*+O>tFSVHfoB#j-

diff --git a/docs/codebase/_build/doctrees/maintenance/docs.doctree b/docs/codebase/_build/doctrees/maintenance/docs.doctree
index 0da309dc4a721b2e3dfdb8dbfbb0bfea579ac845..d8da40f9db880c02c1a506d332d0f017dc86718d 100644
GIT binary patch
literal 7484
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

literal 5597
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

diff --git a/docs/codebase/_build/json/_modules/commentaries/models.fjson b/docs/codebase/_build/json/_modules/commentaries/models.fjson
index 8af0f1aad..fa956d0fa 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 c368a71fa..d7feea671 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 e693ad4d3..b1f2fada7 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 ec6de8b6b..a48ba2a73 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 239e46dfd..7e41eeaa0 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 e074ba1c4..edc5a8165 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 b416bce62..6a118507c 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 41e17fa65..44c2e8a79 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 3c9d1a5ad..9539be201 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 92ed834f5..f2a371898 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 4f05fbea8..2677fcd9a 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 9cedd72c9..8e6de1213 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 7adcfe8fb..e9f16879c 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 5c6bf8b65..3235a64ff 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 917d888b2..9a537d1ff 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 f89a6abfb..aacaa0260 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 8d4e6cb21..2e160fef7 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 ea2757eab..ab3f36d1d 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 3ce13eddc..b5fed6f90 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 71ff9b374..bc41f12c9 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 622ef7847..840ff0021 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
GIT binary patch
delta 21652
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
I6X>h?e^QEtCjbBd

delta 23698
zcmdUX33wCNxhNye*v9)V+Zf{wY_r&SV+$C(VL%9*HIM*8mSjspmW&pbHbkU1I}<P*
zk&`AZO`0ZsuT7e@rMYbh&h}n%(`>y>`;mmDNqcXSCZx@M=}jQ`{pXySGb1CyQqtGQ
zhc#!;{O8}!|DXRX|IFb#^ZxXMJZYDB;MQsTq?wb_Lw>t8=(PL71HH~bFuF4;kF~o)
zwvgNJqjw4J0b4(+?VZ-1#bBHcE3^p(oX%i$Z&Xfpup5Uv5S16ztquZ~I#1AU3vaJm
z=?*!Abt~=e9)B=Y>kstfGP6{OhI@0Chx`t|)#mjAE{8uD-4K<tw?a#x>h|?p?f!v5
zTfiB;O-={~>=gB^i$GmeEGIg=eQqzX=1Q%(0r=~cMc|f5QjLbQaw2j%@EZ=fy}??a
z-vMxPN^jWfb%v~7cQ6!1QD_CQ^4NfFThJd4*qu>%3`l7Ug#zy0Fvvq6OFr8G6oKtT
zyVn*BvT{<d&AvI{?4u8iZU?<4Il_Y~bT}d>hHU-hb`)Vb$?kG{9Ra5gkh)6bv4kBf
z=x>1Y<f?F0x+Vg1t||bjfxjv6Hx2&kHbld&dVL#L;|35SBRJ@C`?lBG91cZTbhlI-
zxe%T#s(yRO3VmSf57-7>QG$<f1;ROjN6?C@DbAIg01v|fchof=)aA3g`~fN_FirR+
zd=h?ZHq=GsB)2c*gvZ|Kt(<ucwL(l><=jqsWPg5bnw&uF!550UdR!Iz^Q$7^UYpDA
z>R^|d;a*oM>p0HNd6eX8psI1rxJdB%47`05`0VqcUrL$p9tEz`4ccU?njEW;c=~W%
zOA&2E>866To1)YxLEv4k3R0tpzm19SyHxQnO?ua8;aycTX-AGWK-YzZj}$aqitwMA
zrbu?z!yxo$rV2&qA26ZsVVC_}1x`?p6EyL6_U!pPb^`H%uj<(uMRP7ixK|6O>3a5c
z5E5z>A^$fM>*@c0de&21aVf%oIc|K!?mFwLkh510Iw0Km`b$GDXDN)%!8uVT{r_Q?
zKeNlbTqR0RlM8r0xs<`PaIc(d8ypPQ1?}!Zh&Ry-4G9r-;ACUM*Jn8Av6~1RE<KsT
zm@!{HVt&;CAt$Qx@=?Mw6)=Kk`4g%+PX*MnQV}ghE~KDX{ZwC?g5r!CqXvyBENoq9
z)S&u72g|D>7e8vs2^I+M-e6SI$y%lp^#M~vH&@9*UYbWsafFSG;$LB(Mu-bbdkMnE
z7=xTwG2nNEz0PUqa7D(Y=s;TIc5c(F;5w!PrJiXZ$mRC%64L<qm4_J$DP^&zXjm{s
z)KFXRn!v-Yte@t{+VqIeg7i}(-JB^*!<;&1*SnfIM$djAxgqL_vdf+9a+feBLTc}(
zx3qONSAM;#?ZVARwdNywy=xh7%;U9Z573F}4_D<3l_lUsL*`)&>Zdk}1Wd$@`_oJj
zyXO&T1Fo40Q>+1)&)5QPm^!kqcn}`3(syZzyQf~y=hceFiK3J^I*n9cZ1b;2rO9-D
zNOg*8(x*f&Pmyt)`z@x`Sm%C&>+?lkI>I!|bQ7s|U6jF%QtcJfjp;o0hGu3=zFgg$
z<Mbm;H8D>A8P~^0yu>s^T%B59gv3?PUiKJ5YYGjm5TVIZhg;?aRuX?lV2!{s=R(*o
zFx~WI8P4(DQA?5Y2iAydqnx0Ks|As1fDyb`eZai65-M3~94%d%cFq%4o#(FaTvs;I
z5bdBpCrrAOkfJ)6rjd1uMwEEV^w7gK(#1<Hv=k?-y8aPil?wY|;>1f4_8eE*$z+Xj
zr4SczGcPewiT^NzAf;^f6sGrbCYz;(dk5S>vf-igr^^}Xxk@i)EQ{zO*4H0A_kz%|
z!E<Ki<&F9KOY$Lj{uuCq`=tbRx?>jieXjg((-QZ=%h9Ojl6sX!{@=#VzOiI)#Y0qz
zswZ4_d^p#Gf5()nK4AKMh3oTqUiu|1DdzUi7(1zMnoDc0SnNE_R1@Ryf93jkpO=_s
zh?`UEW3h9HJqCwQqYm$Z-9*^&`UiM>M4Ky*n!0?gQ{^<H;_VS_>+kZsT~6Z4(jrX_
zpa<vI9x+QTg=$tZ(Gqxmgzc7HIoH2L&tFI8l~;TvLez_{uc^9R>sB3H)97lZQS|}S
z;!>{9c3zr8OaH{4Pjz#!+=RY2IpcEmb56M5!PFDu{exU5{k+7qL%g3_U@DzCr?bas
zi<lF4y?oIo6=xZD(W^M-?h$fi@HH6ZZV)jxy2lUhWfxo;qkW(yyXS|1ka)PVHdfcg
z2f3yX(9+is+o3nu%;=oWhEW6P6<ho9#f`evkP!6{g@T8hQ01h|%e7+FnKdu}4b!Un
zfO+{#T&Kgl^mAJJC-!oxAL8Y;Raef-|Hjl4<K-W7o&1rPn0APlQ!8XKUS^LW#)~Az
z|05R0%DOo66$gPA+)*7Xp5wU}y)cG#vDi8|7}0MmP6T}5xTIcn+G40;rj|oX+-Wbg
zsHf+1u2wiFW#`Iq4jL2fw!u~8fI7O2uq`L42h&mW7;?raCx_f2I0N?kygSGdvdiso
zz`5#e>RG8Q_Iv%k@FdOcvwOo1rwV|k<!+B84cN9joP!}()NGIwVULb((ZO-*GEWbP
za&vT<XSs4+p<Gug*Hy}OHN86dp{0i?oSfK(;XGS8RBk=bd3I9lS$RrsN~B&>hAevB
zK4;V{f*sBvNa1WjuV!MO$xsh<WYcEAMh;qia2o5peA|qC<*75<mCz=Z7wX>&ZQAq!
z_pwn0=wHIle~LvXvo;ETizo}0j{2ueaXXm0Kyib#bdIG)DET=1G1OE&3!v5L<6dH+
zSIj_D^cMPP)}(9BXQ9hHKL%cIj@mTCBif{f=dnTQBJ(qD$;yt@d+gA_<A5Kt1iC>4
z5jQrbDPnB>P|u7_a{C<4?U!g~+EP2#Zpc|nY<9zywzDUJ@mM?4n^`GMu+VSjD|rh1
zT)uSdj3m3~HKLXZR64en9o%~U7t;r5<}fXtV@+R|F*RJqaCcpDjs1Ma1jF6uAORWf
zzMxm#a7J{ev#Pf93}vw+*}CM^7^_ME9i1eIxK%NY5v%$s)L-gRKA)P!T9V$7Ceu8b
z3x-D`9x6<&yp;3ohf>D3+CBLaF$Xz&vCrYQJA<V*pQAKn>m~U}Y_LfK09F!ti3tm-
z3t==em>;3R0>TZAHZ;_DNSyJIAmbqs#zVr3(?eVv4#J4b+dPD2(uQ;y?Js9oP9o`5
z<UE~ZEV;&awZ8eIlZ)2wbI}7;c2_y4hn~jJyS3kVJL<`bz_tZ@c=hB?y4}Pc{;KFD
z4_RihyYDo+>2#Id-EiV5$~C>~`u)8>q0G^{MQg`@O1WcqS3mS=SWcxQg&J8Yb07#g
z1_u$6t06{0Hh>pWjQ+EuF|l%42;^!+<(<n@l`?2fu0{1P<RaAB#sS{$T+GW;7utFG
z&V|c)`QwEv^+=k~$>Ac@-?fMX{H&{+ms1y6vvm|pS2zc3fz9akMaAgbiwg93YVq=2
zLM}YfxG7q^mLuA+xQUmaT&xi@E?L9tH!WGk%fDE%l$X=ZeR@iD_^~&H9E8jorMJym
z%b81Cc+2aSYLxzM=`vnlYSHTbmL<IYh^3d8YnEy7*DqVa>wmYbL(fe;er$`7hvs(2
z)XrqJ_jUK^VQ1o#YlLD{*rWB5yJtPe{Bq9{6H&I4+9TM3&J6CGI!}Q+i2gWL?ahN|
z-n5;(et24oLhT?ikD2(DCLtgFetkNst8LXknS)PE5(?3QT2-op=;K;%4x>$u2?%XZ
zBOpP)n^MpD%b429%hyhA$Yk(j$C1JxM8P^$^#{?<>o#!4il^K3<eTsf6Qz9gz3EFS
z$!ZT}w{8W^t8=1z7v`gZ`dsvJT`rnipTn`NsqfNbX~E-5qyjWtuhE&<;N#GDH+++q
ziyK3{j2l%`If(w+s9O3#w5Umgf2m2sGrxH|Z+p0Tqn_j1kUwm9Ro4IydFWVk3hJIw
z$6;@pv5uGjI78!c@l1`*zs;P>VbW(^&&z054=;Z(Ya=gr&(_LM&fdi9$IV%x*Gx0M
z;T~f?+B?V0Ax_S5@p8{qs>>Zj4_~EW%$}>d>p`?-?j}9P2Gl*j34Js>2UX6?<%s6b
z8`J|e;n&U@bJ45wG_qwa9UR)*at$y4y2ZoGE%P-6|7yO*=F|lmYx@@Tarm<fG&VQ1
z#&9qb3x%QyebTy2&sQtDx2+6qZqu5*)V4+sFze0?u>f_nck3%bntU-AJ<)DXVFMsF
zQhf4V<2Y2=p*i4n9qScGAdx|Fgf~~tqLqqiPwMDyU4o9RszlK>S%u`L!wKnGZphEl
z;V!2TL#v9osE@6>nwK+H&)2h8iw>_TL*HE8%mEIqZs%oTjg^=C*J%Cm)S7-hk_NQp
zY7=U|x{Cwv)0K~3ty%E=wJ`%o9i{%t+645(T6KIlh(269gCnY5w~&{^>$ILcx=tN!
z527j8Xci$~6VsEk@grtKG5Xtv3F!9qnds?j6VWx-nmESo*Q%rDLG;$On$0X(uQ~41
z>ouyC8#HdVY;bTqZ*S<0(FY!U*N}&-8#U;MHfmV1tZjPedfao|kc)y=byPfvp0;X6
zR<dcMVi;u4Mlp<v<+C{P-sM_{J+xfYb?S<k(Q-B_Yc!#u722@%;R<bdXj`f2JhF00
zgpJ8$tqs!&WqQOWMqxRF<hjE>fz_!j=y#Giky)bC4zrO)9k`GH02eZ@!-ZHiT!;*C
zA&AWaMGO~$*lY;PM%eg?E|VdTK4Q1_x%+jA^chy4J2dFFZ?;0UAJW+&T|Q~R8L~mX
zqm50<cCvX7Tu7o3TnGbjAq>EUFaQ_A09*(Ia3PYxg)p!ab`&yczB}a6N2~#7Zy1uu
z32Hho+zVF%Jw)e{<c^>iqO(Ztj_hV=cVw=q-H}PBc1IQh<c^RYqH|5{Znapb0}ab#
zt=nt?Utic~k1j*oLsJUV*v^MF81CzHZzrkqVr>A@G;Qek*2x8l0jJk#3qo4FvA%YC
zRF;CyP#6@8J_whVWYf0=l+7CDje%R`tdMiN+t=qunOjX+naW!RrFKaC>jgw;?$$YD
z6P4O1TDWZ{dO1|qFklNp<~f-bM?JZTFjGkP+5nFgsFQpw`pQG%V8HKj+Cx!K0YISr
z;Y#%9&`oU_43fM*z(B#S8ID|qjI~`MUJEFro_uKSF%cpO12$jS=0)4Lm7@DYHEYuc
zcl1*n)?jD{%yePOOEdMOo+bdlRUQlQkbU1zUn@|EWGZ={TtY@*LzI%RnFXTC7sKVA
zB(KfaABM(YmWj$s6;V$rAcifW1hzHCtPe8!C3=7ECfj+IsVY3p+S|B4zYezTy8tt6
zXFKRN0QD!&LZ}+GCvqNyo^H~bWXNvR@>R8Mo7EJzXRexuMBPM>ezv;WyQl+|dQT@O
z$MW%d8G)xc0pfsq0xJHC;9pG((%APi?DGI8(+=@#4f|DEj?<;HPctH}V+4M|36K#(
zBk*_N*B!KK^4!MA%?2VM&(d%&9h$BPJ>?AOPDbGnqW}cRh!u~(Mf3;TkJh-qpW$u>
zjI1}v*r>;Sp*Lgn#u~GesL^<o(b&&vkg-xv<E!i`9p2*6(SU8G8Q@>PVkl3jD8q6Z
z*}sl?3o9)EujSYr@J7`(+Ya_#me=p=*E>7)Q|6w;tC%Md^QSS#Lrj&19S^Z78hJd>
z-H|b@i%Gw*z93qpQN=@KrLlmr2pbN{2<?DC=V^n7<_0+hUh9F^xnLI>-sRZ|FPFg^
zO@me?0LrPb(e8w8L!X_b!IH2=b^#!$$fnxbI`|(%r)^V`D6de9@@*5)e{U+O9HRUY
zxB>>J<_pw8t~BI**ADK8qU&r$2}6{7^rUUJM1@1MZ1c;gz@%|LYs}L8^i7916$nH4
z#1g4!4ZPn*cG1<4Eem$Sr#7&f$H<BPUJ@>d05Bg2hFAbTMHDbbPJv+3@29)L1i<qN
zRPT(Uv%LigpF`1AiHhx26Tg5WjQTtJogu0z1Q8H6ksylP4DbGU&cb8Q2ztO?nN;aH
zLvGHZ*X^bVtxrrEGv+3M>%E1<5vMI+cfrg7DqSipL7uXbJ}K=Xfk8u>t~Cym?NB%~
zvGtP7dD0n#LHgsWygBNT0MwH}@xmP;5aIL)KsYQLK<`vLEM=WykyDv|Yq!#L^lGYo
zcqy#%wop_~SAtqC>o>&!)Ti0{ENR}J%#;{Jc~s6&dtSpphCmfV4qA|&n^H{;h}L0S
zvyf9m%}j;KP|uq+6lB81z?VNG7F1KyQNhzWMO7e95P$cS!4!#sPE&;E@{#z$QE|#D
zDo!{Q4SSdcDHc=hNl5_xlK>(ok!ck@Ux1GAlWM|(EYVjHBhb5^1F(NVg^Y!*Bwa{h
z6Ic%s*uGH+NL@#KT3zw0eR^sUjkUK4I1wq9i>C-U(SyP<A^0zP6dHzg@vBdgYN`q*
zGr{nZLM)<3+sfM~z{K0-cM!-~yi#kuB)(+-gH%(6#pt}8=#ki=XC9OQ<;@&rQbgZ5
zOL)CT>epN=I-Z`5PpBq7TU~L`K1k|-Cy-x<H#a_l{TxAzT+fo~QF?tLPF)Xgu8Flt
zkswC@E%C{}#c_`1FV>QtvBbff6(7ZK&x2x8WOUzrUtw&N6&^bef-Rhf7}fkLK9)Pr
zsgC%FBn|PozT+Hl3SF!ErD{)x_|1>RZ$4EIt@FP%TokRFEP7bY(OeufM(QWy6a19x
zPD9+PAcp>rL9sVJ=Eq4jaiLh~UGbq;@@kD>fb*ua_qqf~<cTv%{+=M9maPMRjAMx5
zxPkNr9iMcg<Tp46F|bn!EWxYx+<!zkrC8g(g%i_pa09Q@<a&r8I9D@=IA{z5B`UL?
z$Dst47cmh)DryX%owwIWd3l|VCpo^PpL4l%u;1ngI4v4~?uw72gI8-jyh%{dAQ7vt
zbW(q=7`Jg0oFehJ3Jx8KsehGotx>#+qtNPJ<6P*Z`wg#*W$h|XEQVGo>59w<2@6VJ
zgbAQ7HWN<28K-Vde1!LKMq}tqA8m8j>rqDFa|DFWk9lQG<7&#Jj>k{9hIEpn_>FhQ
zXJ|+dts8$<lKOMI@FPw!R;@4ddaYlY2)o2ORR5CV<8*TtB3k2r<&`liaK@M7eo{^S
zPQ&nG9F{(dQ}+R{8yks<XyfCv`-TP|1D+Hgd{X@C?OZ-x*G0a=Yh$Etj*sI;4y{Q&
zd9>2M$AMx{T8R|&^<`akB<k55uO8-I@i{1sUtJWx`hobYv~ZHT{txj=9e+{Jd!(A0
zrA}?V@nP4+=b|Tm^)^5fIY%Q=&j_a&!^ltK%kl_;J|_T><&}r6%VHJ=u;jGE7BpFQ
zr3C!`5ZdFYh0lz@HYNT1#xgm@;e>@jfPT`2?o`7HoNQ(GK;1wPYLeZs0uQ<S+|B@G
z)RDb7`!ZOyDPXOEegJ~4L*=DjSi>^<K$z^`l7(U{Lt(imUD<cEyI?PpF74&yK7ZKf
zU<nCi@g4iJK9!e+0VR<rCVLGX$;vIIea42<nAZ`N<jWzHwxi&QZM!>~g$Z!5KMuY2
zT)t4qj^;mjHczOel_#GmM1ML`hWx{2sA6~`8X7JuOlgM=3i^2$KYYYS@dNWj^H%iJ
zXG_tB=gZK*b5-cXa3c!5P>{+24x8Ub4?Z&ibv{>vesN?9dTh839echgSvESHeNl72
zc?+s|t{hE&ej1woLOxpXOa|%#d|y0MilWbzqFv9_2*r%O>z<v9{`6c0%6Z0wMxL!g
z-On`8)P&||v&1kc7`^lSxDsYp8LeSh#{_~d_h7r%<{n@N2y!k(RHxj<2*lc@_XM1F
zzkjpS(Fyw*UIvJ^yihoWJ<sfPxI_Mc+vaWe!}oAtlYrGHu(SsSzU~E6DXY(dtqS;X
z5ZH~+>9vO8vp-6MBEor<a+A>!u=Rx&`?e~d6k^q3zV1Jikt9r>j2~+dD)5RXVLJY_
zQJ9GzZW2nN=g2{Q3LFSfZQgHw7T?kcU~3wMCj420(18EFK`6&7bHys@TC?|-D4x|I
zOcG3}wXQ(z0>AlQ{8E!pZIDekk|UVXwBD^Z&&CrQg?jv>MxhLUt4WwlHH}|x5(*QU
z_c0EV*x8Is5li$5Ha81}ho-fQcXXv6$S8wg3jc@$7URdB6AEzsZZQ`R?iMTXMkMCr
zpX?Q<;iLP+V*J)#aWWpaUo1D2Ey24=45j$`JH&K+YPUFE%3B-^hVkJ&VxjR}^ZWSI
zePR`!B8x>hW1m=tH<RYy*ejOczYK{b<1&`8w~1=4aDou9T2(ErFt5Vz-!9hSNAD0P
z;-AUl<b-^J*NIzC848UrnP0|d_lT8v-hQ!40GrthjGFg|nfUPSVlD0=>}B2|*5IW>
z;)J9Eg$QfA&U`ICx(Ap#A&b*7+AWqE3VLwK6oUze2!@+vvA!^k5*y9cu=z#&$sNG^
z^nIcUKe1ahf#Fk4ZQLzp<IO+}JN5(D@*Tk2>^sDYyhMez)?tgyJMk?;Al1+Jz|W0)
z#3p>pK5-I$Xb7~MDvJ{g#Xb1-g@$psWk^hvEEd7ijrZ;c-5H0(a<GdnR~O)_Jz@s7
z$v~wXIweAUOXj55(2~{V^f?1=dq?+T^`x3T7|W70NG`212=#<}y>2@jSd}XM0XM74
zUhNAw`{8R&utV!$&a1SiEM+q&i7Jjgz#EWgDrfZxYy4g~Zc<t##&CqY_lm{y7+jue
z5bDRftT5oK&2m_;#Ce2=!9bt5?}dapMo<NwX%K1-yem}VHzZ*^PE3GOg#exyN)&2~
z((U0uU`MT$T-;8FYI5o3OuSwY#%GFN+c$QowbRXy;|C;R8eSs_lkxWxg?t<lg=RcM
z6l(A$gHVlk2*LzBKS3xEa_|O8C=$&h79+mVAWXq`3DD-O2rhng0sx(oz^Be6KwXhh
zm{5?s6zFu*EmzGtKD9XTVL_ORcNv9A_^1e+KPd{64m>H;;Yo?YM7-W8R6>qc>G51X
zq&#W<8J<DF-ypc(N`y9bl2C=MA`Cy{@Q4UM2?ik@X9A`yiHfhvmuAkw9~xn-I%)(z
z+9iQN_YieGXoNB8Qv+amg#2tx0MfYzAYFuai9!*lJzx&wFB66Fkjw=;luyjrF*6I@
zd;3*L+Fgo{-aZ9wxxF@@T4!>*`lW~+Y#>5|w^y)X2yNJ1^g~Cp@Lbw~mV2~82yeI>
z-0S$=f^^_219<jX!BjZ5wbvgGkq?4!m06aH7MF-W8v(AxvqCL?cm#O;>lYx&qh|oY
zjc0^REZ-xf;tl(VKb;mV$@s3%L7%@qEm-l$=g^TP{R<BWhQw4hN?TS67OQ~Y`%);y
z51a+V*)szD_r?flV#^3v)DOQDN(z$MPIL@2<~DQp0iR(i{_Yph{|#S~pR>?2E5CrB
zM@|bRfTr$Y_*qK0y6$tp|MD3ax8MDoaXJ-$>r3GN`7c5H(bJ^gKp3%bt22bR_`&wJ
zo)OZElHFPyQliRt&5y#ac@E90!``z(Ch)xZcA;>h($AJtg5_@lfJl8#Cw$LMX%;Yt
zp)MB>{i~3hse+anEz^upP4r)eKLcb3%mxTZxON|K;6DxgeRM{c4CXTZVffke1yC!%
z3r@k$0RYBRM!-lKPYac-<CD};LkXpM*mg$9U(BMfUKAxB!yL~&V72ktK~N3BZ~zg4
z;|cg~9|Y;GYFr<ub>3_Rrw#U$w<@C<oz*KdG4?pk9fSk}bs%HN@t?s`>e=&Ddoa*v
z?Sr{R7*ZWrT_&VVy1nE(av`@p43ki$*<Zd8irN&aUVp#aXC)ipN~0900b|uyWs(yl
zWrAiUXZ{TIz@VX|SmACEz8>g@_iO2~xq>MdJ<^kx$N*R$SF1F_K6r^dXa}4MuW+iS
zo<$H|4!wcI%BeVQSS%2-(O;J5s8fm`nExkUJ1kb?$w$QTc;E;`%!h^{V&WrWm7$;=
zFP{$~4kAzzK6^w=z`KUUsd(bBI0L62fe3#12*jzvcD!YlSb$Fri)lvL)Q(45V3uG#
zBBnL6fTXxQOZ<@YmD^e}<6`|wg1+*UGAGfQ^P!e!#4o==2lADzQW-wdDmCE+3#3Z?
z`xdE6D8a+6QVza-p)?McERf2D0#r6V2M@JKCcLIgnvNgukftUTuYmNdK&TcnZ}RZL
zVKFhmQfja?8E|W-G!<90Nu`F8mDneN@c-E<rQ>_rr4D>z5#U_0SgOF^Un~{in>wW|
zT)IfA!w=4v>hYp^QmtXqN_@>PjT7;&+n~|3h0+8(*e*@M|J4dmrx!_+aYrXG=b10f
z#dmf}jgX=_zL`&@Uorm{?^ysqXBSFq@x*ozF4PKg9qW)9@Mm4pWEcg?7D<Kp{dPby
z(jt}P^d<1~VvCdkBSOX!DIdSOKq|)Fi=-OExRrSLDPs}qrNM<#0zNtqxUjWJ)p+|N
zsnSrr5+D1qu^8tr1e6af1iInH@a%Lu2-DssmEhma2maT$NTo2C@oy3Ek=0yb8H;;5
zK>1~@QX{^(3w{>11C|dLNHg$Vt$=E32mCk|NYjKA+|w!L;R!8L65c;gnuN>d1JHl9
z0jb;Cr1AKvE~yNbE~KZfYJp-Yy058BHO9Nm_v5rqX(s;8BB1v3c_8vzZNT%<E|B%c
z4rv;j)21zvDw^4fH$&sMb1Tf=S*nqo)w#HR1*{LqM~TSS*x=nN3Xcb%DLXpF`{qgc
z>ll_SC0|uPv8M~_EcYrGSrfpd$jJ;zA)wb2!vPBmVra^9D%N=RBva#&rI{+c+_zXN
zOrRiPl<Cep<S`ij{b=fezDYdx;TKQBoI2;EVIp>%FjV8&e=v05?&ENK=(wR0x1KOm
zz{s0bWZ<K=`2))=GQN*T`>q*}YyJQMbKf5fMffN*y7Rc93b(yuD967!W|)TO9s@ih
z?-(ZGk>iF5`2CZHaxgoRtCyjMfFpwCC}6|3_Y8SzNQ4M-M!>I}Fcd&S^2rVP_<JXT
z$ev>`QN_m%r4Skh-!$aI%7m_SETxiVl7u%NGfW2;IB{(u-cG<B?*MK2grOu$vXMxx
z2BLp4--aJLX(-80aFba+4^Yd^*MLwae8W#*dOrWSAq$6(8_El`m*<s0R&Q<wxI#P?
z84B?y#|%k{+l`hRAc|q%yM_YXebSJDfAbFDxD6Ok;*!m7hu7m^0?1~bOa%$b)Rjn{
zr%YX8!AUKQZh$hi!(xiwQB9~fx#+Qtx%tWyjYSGc`H)y~(=o$@3f4XsK51%&jZVMa
z4VLDx!dFU(EmPdIE1Q*@WC}=wqEeG%hfIl()2b%oS+@_sYM8cU`r>S1Tcsga6>QmY
zgDH`L(SCuYHf@s?CZ8{KLTFUJj0$m=Jb*Q>NBQCdJ-NQ+o>PWH_nb1mSCVq3l`a^`
ziV^qah?RvYTOmSQ{XRfqSMA_&$#O!%WjV0I*`Fmg;E{9)GBC+5y|Yj(#2d3<9kahc
z%*|BH28os<B6KB~SD&C+(@%|-H;nj>Y;g|$Yc^ncE=!yYQ?^ZcVxDTWF!kzyhDG>C
zsYY#n`l$Iy{L>5|{vSE8jD0IZEXUh3VcArh4GXHhdEzwiBa$S{?RJ@D*&*RgnGn|&
z6o@93uiqLir^uwJ3=)yc@xwX5wj&>q{VW{<=a(5`DelaN)!#`I1V<1m5g*SHlW=tg
zSuEy>b-?SsY|5*$D`T0TU|EuY+cRJd__thfHa?Ljj>BC!fM{O^EKYaj!ZNagP{_;{
zOTf8~|F<z;71i>tWHBayaql*P6f=kpKh6Ts6Y0Q0axT=pnh$*ZFdZI*vZ3^PE@<H6
zOo;Z@Jh2|H%7tM5Y^FFxC_<05j#E9n!Dv};#7ncqswNu0vz_WziglYmu({9chp7!6
z9@B%6X9yqGWyS(C4^oRyn8fi#3?PjR!C@a?RMO|K<iqv=13jBA!bT7qY6Eoqv^pT6
zl+3XleG0mf0<lPivG1^Zoz^~oU;y$i;e$iUaEtd9h<PT4hk8hWzT2W87|IX}Reo42
zU|1Wg@n5pV%0$+f=@)#2GD_6CRN)Ss6S7`Ok|UiHlHr1~ovtZ|BseOynOk9*3rRwd
znrVZi;>GO>#@BMi0t;)HqG1FVqqwrQD&TMnjDKo4$zo5K(DW-yN)u+aQ<OV#(C-K5
zr^qtE`2u10sLqjTPb=D=UmzAJf>V1|s+VPpCZ+gMrdX6s@rC6qsyj;j(6`<*pkzGb
zlwmT?J7p-to1m0S&lrPpOp3^%hYQ8)tMkeCrfqf?QJ*^0zivK>+uFbsKWGEXytxf5
z-rWW!J`R6e4%5ds+r%6^rA;iH1vUtoJX(7?Hw?<@EV_q+N+Jzpn8-<xWlKK2O1G8K
zF9S7=MyGFU)Mb?O>|VcZvz5)?VGIp8=|`?_l{1tSCH9SONRqu3T@xCQ@`H8h$u650
vzN78j>hwm<5_&Jth$=#5Xk)Ml$w6#_#Xv7vgpiEapv&nDMQ;m-du#tMAdeS@

diff --git a/docs/codebase/_build/json/genindex.fjson b/docs/codebase/_build/json/genindex.fjson
index 273374e95..388906a23 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 aef781a85..41083c153 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 ac789bcc6..9e2c48154 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 75221351f..8c445cd1b 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 d3d0c8f38..8b4e73de9 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 10079840a..098d2c3da 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
GIT binary patch
literal 27542
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
R=o$wa6<dnvdut0*{}1Tp`F;QZ

literal 27544
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

diff --git a/docs/users/_build/doctrees/guides.doctree b/docs/users/_build/doctrees/guides.doctree
index b4d8df0fcff27767284633340b78f6914d09e14b..79cd27082c8a6b07635b66aa97da9b83a7f73ff6 100644
GIT binary patch
literal 2554
zcmZWrO>Z1U5Or+thaG$U0YO5El@JAF4)!`ILQ#Yw4hRlLD-MBM)ase(-EMiNd*~1E
z`d|qTpjhe~&F|qS@fUdAvol^BN0u`+UDZ{u-m9A5Hvj&2Yc2iwQK52YMQKi@Dwqj=
z7!4JZHvAR7{5@QUW4|S7#q3p$*Vn=KXHLYE6XW}uO+}HcADgQxQze-yWu>x=;FSsQ
zgWt-9rB*1Jo(7iAVzj^?;NONHYE~<4nGO@blRK?(F)4*)cs`)cs{h5?UA3l|h%t>Z
zQyzy_Q)#A3R|FPAXD}m+Va`QaAUYoSnjaXJ$DFzv`G`OETbj;|ayn<huf+^Ee7}8u
zJLallW0Q+o89Sb{jMla3o|krV`Em^W%-9*G&A378R2v)kr|-itZthuOOSXFN3;xvi
ze`qj`ck<8p^LQGEH{Y>E>_hkdkI;0aU(<+G;9u~k{McobpYbEVnSeWA_uJH3Eiz{l
zCdYn|m(-XBiCzO$#3ZBnMcby0*vDurT-}~<E<+N-TvfGlvRF;}E$)4`nyue6H5YPm
zN{eF2q=8kr)oi8M=+jnr#=iyV-|?5{J^oc>*#HG;k&--~_)&x17~SSdoA4(HvA47#
zXNI_qaerxKg|JEsTH+|<-^5a+t1=uc!ucA11wg-saXaB}lq|2p4SxgcS;uI<BV=B>
z0;DdRJot}%!hd3ZSkXnnYRd!A9pto5<eB*0r2`j50dC#!*SKPHR;n!A_<m~zjx^O6
zv+#RMSWe~|6aw>UOe}h)bdb5@FDJ2~E@PcrIy0c{u`XvCONGPvIy^RTk>6@1llpmR
zTxL)+G_EA+WHN~VYoyBuyfS`Y$U<nSf>^3&%qHjEHdLeL>);=D@=B83E?BN~k~jKu
zxGGIz5Xgq}2Y$Dm09};*d&44L#@}2AUhyO2hoZQ3esu3>`v$x;%vvF5m{|wi5SwZx
zEdy75{})<1bg`Ra+l`co(`C%HD=n%3!nrUhR|5{#q}9vBKU{jn6L5Q!mx^8xR#8zB
zP+eoj;F1r1q^EhT4}6n3EZ|0*F`yt>#Ay_RKg4_?Owz23oP6L%@iHKODNN*U^eJ3b
zldiCd-)Eq3gyRZ~<cwMHYOA0Swxv}Kk1aGL$1ut-ki;GuXE8EJlq}6HOb2WsYy{0Z
zLrQkZ%5dKEkDD@C$>O9pWG*aUDSD@w%I*1ezgto{a~P(GTwpq`gY0Q_BsDE7yzxh<
zr@FHO8aRkSHVmov3YNJU(%vx@*g<}ESQQ2@b|DIK+X>%`!{93TCroRl0UGW_uSxUB
zsVqtm(C<eVgW<-JaT)IbAT&cgMbzrh?~y{72sjd#QxUJ;VDb`w_7c<`ony!P?HT?8
ztyp@Hb{O~_g0%<6b##vnhP>`#uoH=pQNt3^{1a|%ZQhK>Rw*o5!R+)@>DidusvM&L
zw!l7NM1Zwg(lVy8&1s1x*!F59WbJGR0V;HMdh+_jpc)S)NlO=miy1HRYcYOGCGn=I
zuQtpTiY%(g`H!G)r3;i%Ln6R5PFqk2daFTQu?YNGLrN$>Rf!sSKdM=Mm)fI*-D=LG
zIn^>Y2*hHvg4dpM_HN$2ls9^Mx1jqy?Ki3jen6JXmp}JM_oCf%;{W(j96sc>6u&Mo
z1x9!I6MXOIci*4928c5z875bf-6yff=mC~?8k4O?Klq(k`)xO$wcVW0=cn}*R+CKK
zEZF53Ck;Bfi&-S(6qvWNe-vY+8!&o^Wfhoe!PFt_C!e3aDgyQ_R-+%aA3)2xBlJ{*
j9V=fl%|eLlt^G8?*TQnSwadZzgF90n3oU*dx$N{mj+XkC

literal 2560
zcmZ`*&x;&I6rN;ver<MUHmmVs1TR87>`nv^;>m+3WML4Jh=`%6>8_b7(_PipkDb{=
zAO;f>C=jtcC*s|s`j2_{tLo{VodpAv?S51Bethry-kYcUzx_Mxq<?;#tISzZm{X~8
zW`Z9?L&>BKzlINg3{S!xf77_RvBKh<k|bvf1G7Ie7v)?PWTBLm%Hr;$;D?&7jB+|-
z!FS-yFl&We!tc#C&_XL|naqRleN798i*2O$tQKYKk!ZGHn#qh2Q&G5l<&O=^EYd+X
z1taT)(j}}D<!t3F!BLeXT<~3I7bl+t|CVN%(m9f@5E0)Cgq!(s#j36MXqn`$tVm^;
z%N1Fd1x&Y@)=IZdN&U*H%nPPb|D0xzO+gLUtSVx9euNr@T);s}?ChGKkX#r#N3NNY
z3$cXTTQT-Rz~pp6EGu!@;_?9YlMn8G3|xjeEXLBZin*?+mMDrCs~Ih$1z~mp=;mzh
zqVwaX8zg2|2>I9qq;XL9Bt}g4W32*B(2^Dj4<UE)8z%ft3^MjZOXp-Ia?8Wnz#r;G
z2InTFAN*}@ZDl^4POVZPkzjUls`PToZCOl#NI~V&(PgYZN0HZ=41OG4w7pI7QJcst
zITuD)rIF(yS_aNZ8aapeq1Avm78PFlZmK?>G9}fP{NNJ*Uil+d&RGtmE(&HiV;1BX
zQ)d+sIjIm*tdWBN#G@FoA{qK;5+!bIAc~m5^8u%YB?UWYML6rCvk|hE&B$l#kRSNN
z*wZa2?>C^VR;$zM!g3`OC^<Wy;-rbdSQTMxdgQxMoW6ie*jiW=K&>;|@HIODfi#g>
z5wdsd0$9PKSPdFv`K5B8PHE|yaIxeCJ~sIMLPcr3cSS5$dEKjf5&R8k8SIbj%_E6M
z8xAM(Cbb`e`3m@NV7l)6q!IsT(}#v>GyUFV)UBuY1qeO8pNX%Ou?Y*4i3-o;{G%!8
zY^E+9Upj%lpK61AM^Wq2m0L9(u{G|n9qQiRrS6q#_~-teq%|SoKh3YEqL+TSWRhuG
z6Ry_^bh5<IVrz?XON<>0!rjUWMIRGZQc)0^=b9zfy!7J@jZ~SsfWC}(rv^sR!v|l)
zQMAY8d6>DmztQ#)V+2g27F3+OI6>pI9ptW(w8R_cX}5jqZII>n{GQ0umxIV3kUG8e
z8!A5v&JVy&a7f$Ox3{kh>L|T*Wt0i<4Em}qnCUm8R@xELoEtWlIx5U{R=CiQPca=l
z_v+?t9}LFz<;~IF8fQ*pu7l_Gs+jpf&7=g#k&wB-+_nT2pcg6XaSIv&GzJqTnR`fP
z6F#BxByht!z8|R*2S>YEw(#*G1ly}<Od#+*{tZCq-#!YQ;A1GK_><xD9X^@@%Z!Tx
z9hd0G9p2%08=w3qevc1*@5{v5z@PJHyUs3oa@@mR$L~J?v5-}J>v>2!7MFiUV!yaK
zg-(TJ;S6fBbQv)V{4T%7_uL!~29cD?VSDbT!4Lj7zMo*$V0W;Sm8Mk%jA<+`rQ|23
z;zF)ZLF&y9fd1z6HUI!iwKhokLm{)m;fDaWSZu=`KdyT}1%J5GSof2S0sX-W$0>ib
zv9LUjctMN6d_PXTxRT*x#{YT|X8iB?-#;(#<^Hlza}4l)Myq-Y@aHYbQnxk$`$0+9
z*zj>dU5};t(I!DIax8uLI7l1AC|O+KZGfpVM_L$b9p7sXIUx8)>eK79E`P)SL^Js7
z8J>Qx;b;6c{J-H(>sRB4u{-vnLIF=emYMOR%K}Oay>(T68(nsy6F+Pun9d$wzP%Oj
mK^}j^G@Eb?>S6|7R>7zdXd~oQ#WU&;8=)mi#Zs=h`RRX&_YKMb

diff --git a/docs/users/_build/doctrees/guides/authors.doctree b/docs/users/_build/doctrees/guides/authors.doctree
index 618ab3c7512ce86b1f920636d29df8d45be9bcb4..076ff27dd228f3095386555a1d487e1aa944f660 100644
GIT binary patch
literal 2880
zcma)8U2hvj6it&jwv*UN3PluJ<Wd#VsEKKzqEI1J3H5=Xh=;;kH5%`ZJwtYPmifqs
zs!D)_)JpTl^3V7|oV)AY*sfAYv`S`o=6;-e?z!{Z>faAHmdc;dk9FjoO6)<VV_}QX
zp%<yhT=7?N_xIvuu^YM>PlY?r@wr@b@1!;=n-oXkdTvC{X)!q0-V9Qnc^es(yW+@)
zH6z9<reon<d!CMT!p2&=Ogq8w$rjIx(2bPiPU);%wH=?3yFy;U?@H*vyf#i4_}YxT
zF^G&MDic`mAQ1hAz25BG(k5(-$z~bHRcCl+$J(R}Z!DkSHKOQ5QYA60V<DG9+lq){
zYCw=%@<!+yerl0rB#N*^5w3)_di``Lbt;B7Qn|Kncq&Fb&uz1wzGo-*hXB|Py%oj|
zCtd;cVFjo?FxD0FgXhIAB4|0~5;5!ljvR#UlLmWoFF%&I=>YbxJ`-nDv)L_w7F7Y)
zP$8<Q{8SF)T|eUTzWgYxmM|VJhjs3pQ6ulB1#U+Px3<EiRRKo`jd*li7j1>AN-txd
z*E_r)A&xG5@rmKNoQ?fk#QxngsqCOkd4PXX!812NAqIPUQvmk%26{ZOev~R}i4g;y
z#e>|B5*1YxIVe%D)83W$!uyw5EvDHc*C+6P`MxsjHS3H9qifQm-rwWY#!PHwY2dLv
zjdsSt55V;n;rclmL_S18zQpqtp2v8;d0u#m0*>y5TmPNneBl4%fFFsscz$rWO7({K
zn^i*-mnq;m27S_eBc5IV@zS=QJ9Y1EJ1_E(aQ92aJ0Tw&b}o<h4G=rL#&Je#_DO5@
zXS9Y_Ad~4b)df7-7e=~O^+>&%L(4d{0?(mat4T@jt6-u<8$us-#u^1_(|?t!?aH?N
zLw4i~AGTE%D+ASFj+=>arG;K?uTs00Mc8QMr<AnySVY>C+=ifCMQj&>W?{$`hgU+c
zR>;Q6_JWv_Gx?af_d*Ip^pOu86|=^|wT1olm!;6L!a0Be<=<&W!5FRJL>3oe?Ps2N
zC_&v8VZG8j=1oEYH~En`Ku?Zs88Dhj<*b&Gqp&eOMLTfpT9jyh%tXpn!gvhXE#>A_
z=$mmwNeakS1h+?_M?#$Wl%0`elkp9RFcTRcB_gJEpPT{q6J?dtG$(qoPjl8Jb`-Wn
zIuZoOc_OS7!WFMWH|Eeg$I~1qx~NJ7#g2}PS78g)a}ZM&=``n&!>b)}rW}Fhyk&_v
z5lL~_3LjQ!ibT-7wCq$lIg|8eHM;8k%b}O>Y~nF-U^&JJS;n*}2XHC%(+ppSo5&}f
zo0AnB%pw|r&|9$>c^bZ(HU&l4uO9Q%;zQ5rh+R}7v=Ej#FTxFBj5Yubeo<>yEhWS?
z0Sm)69kI}SiHH;O0YLZ&`NU2Zhn=v+Vr2<%1fGo*xn2?33I1%AP&b^Wimlaq<Q<e^
zdV-A=pr?tk$uRN2xQ6poU^Lo12Af2L5x1fwTDT#d%k9_0q0<^y6(!vGK%2=>x-=Og
z0da<*E0_XnO~w-nV_otDH-)-ZeU;_jH4q>}@5cL&_ARmrXs68aGbYtUCU{(d;Yib9
znqO{(k2O0>iSzHE$+d}*MvfK%rm7@r7yX92&{&-n@>WGkbbwAvYT#Hu7x_H3`z3a>
zG51fo$*4demf$H)ZE5f3<8GC4qo(r-E!LFg8M>kfZ8p83$lKxOg0+Q1@}JNr1!5Pe
zgk=R4=+E<~2(6!<J>7o<5GNuNkgu}s-lH0$2DsUjf?4<ItFTGAUsQ8YSM&7r^dLXS
zWil(P8H<x4c3M=l2Q5<B7?{^>e~oOE9w0r;i4;tAU}^{N_wRi6MO<LOVW@?EeM_9?
kP0(`#cFbJ&s`-Pt+}z)Ak6IYpKJ3ite@yq)m+*4%FD4LekN^Mx

literal 2886
zcma)8U5gw=6y0RMruSoZ6O9;*Fg^%zVRs_<Ao?T(kt{5MBqCxcs=I5Z%5+z?^|3qq
zAovkAfkKqDZ+VH5e<1#cyox`_Q`OTwGb=G!Xtuk$>)w0LJ@?dnv+~=An@jP}_j8pw
zD++TURnAQ9dtsqu($<gacfPH^uCMwF#-+vzi|>>qIU5-)`(1Ndrm7$#rL0sId+*jh
z(e%V9r!!XjB?L3fS|P`Xd!b7-(n?w;^V+X{N(+aLU8Xm!7G)QaXf|S+$&3+GQG|Tx
zFB+Cvl!IytMkXVrORVlFXDeq3K2<r=)qd64(f<3je?_xQ=^RB@$cXm>>5hEAV%02q
zSlP*4S&_;xmn$+U3oKn>S}WZJCCwwJGB210{*-3-OhFCTtSUlzej6Bt93em~?C_l5
zA-OO#MXi~VBQZwUOCk42V9Du%SXN@Q#pWK?_uszu9(YM|tQbqnD%5&HwFD?)tY)+f
zD@e0Qz-rD?7lL1GyFo&Ag^>45jWRZxo`j5Xf50lx1TAS1`4DoEza;XvZ&0yMEKSLY
z$StoAdwxrgG6XlV{MujP)>h_&;m|4t5ea5T2TG5J+?K@<j1*Lk9UTY!IY6FgviAKD
zqU&wU4{Rc{<X9MCl}3$QXc;soY0w;=6RSaS098Nms}X(p%9K=F@|BDFd+2vrnX(*A
zofgb+#w^6qr_L%Oa#A6sn4ks$inl|?ie%`YiIUiyQWQ8t<PA;>OA2<(iu!OBoeh+A
zYDPV?fPBMmg`Unx8MLIFoSYm~r<N-jNy*vq5MP==j8%cgwnu&y6Q@rxCTt=s08s19
zEPbO+P#{fER-o*S1^_Eq7*>M@Sw05`(<v>T5H7~Nz-4Q{Qm8N*Z=M;Jv$|eudQtmL
z%rev;)SCwpZBI2E#T%!63(8mEe@fGNzfRiW|73W_Fl~lknvA;1@Rop}hqp3uQyCk%
zFqx=uPmbRmLe6IB;^$*0(Dxx)#+5b)+Mw?3F!R!tv#Hu;6YOOR627u1;WMcCb^ltN
zIU$iJ`dEwXfltOvGEE!dt#yOCGlqGwi3RKu_G2NuOIe}lJ;F*V3PST-v#6d2zCV?d
zDq}a$pZ=nIz>@CV{y13DGLy&kkxTt%*H7396h|#2nY!Sl!F7ANt0XP)1Yce4?$)LZ
z^BaCy<nd)M=m_GD59_U@@7B)upi*c_+t9yP&lq+X!MJ5R6VMyxtXYA#UkEePSxNg{
z(ylaFvD{RJ4eQ}9loKkyj7h7ghGz{<aTW|pDxJwNZfNH0-F|qtKmRUi+8zyj?%u)m
z=MSJRX+Lus#{<TtIdP7BuMuSAb63b*!2T@(0cd3``eMg90ka0i6qnb4rK!Fl6)3pl
zOMX2_FBnjFLe1#s2?l=+IKx@Vm-%O5)8}_<PH;KODgI@+zQAQEdXaHaKrs^iyvmpO
zwKgXIk>B8nPd<vG59s+%{QhFRxnPd}jEGBq<u<g5!sa*rP{$J+`+r4wk6cPI^+K}x
z5VL9NI8ayfYy2Evb}3>cD4&ist$2rUTFv#_T$n)|#{q6iMx`CVdj@-Z)8X9P8>rC$
zohgMe;K&ScG7c)279xvkG6ydK<SKvcUw>Y%dWPpI7<&G95lk?y;BXzUiQk;7HWc&p
z1*|^y>r-@dss9R{29^AG{wESW_HVry_+sHNvB9N`KRH}Mjz6Z|`M&w})%1gJ{8tlZ
zQDd4m%J^k|pTB(bxwD9f&tAyK|LmV({2L7Y6Bv4O*aL#8zS_s{8bATxdAyxIa>JiF
zp9DqP)2i`2u8+7qa()|4=<FvB=%usXHFdS65ZfoMfi*Kezk6nX8+rIC*#4gAL-{yC
d=1pL`wYSy=<DlKAeyjDFI7&yraL%O%{{mK=j2r*}

diff --git a/docs/users/_build/doctrees/guides/editorial.doctree b/docs/users/_build/doctrees/guides/editorial.doctree
index 3f67030c81f2ecd7b0f7b1cafdc182fd7d0af256..2927d58886c19ffc8d7dc38a0aa4beffa3c4f2a7 100644
GIT binary patch
literal 2635
zcmZWrU2oh(6m64ic9Ui|A5bLJMlGm7ct|!y6{;$P`Tz(iXvIU}ts0H(*_}~rkC~6`
z<{=V1P&LxLG5j9>8t2+;XOpIiQjh1(+<VTs=lai$e_wCktAD~M)2VkVw<o2}gpFZ9
z3xz0M{3m|>SG<ZxVXNeYaF-QcU&XK`GUc>UJdYC_HjS97tbXyay(|))v#Hju)J`zG
zvhgh<QsuZ)x~!l2j?d`8DDUIndKef{Y2$>6ldzL|V{kXiRVnbi&%M(hoHtxut<S_6
zQ#!NG<G>kS+Nm}L!;0lIEF+6SDpj80bUes=p>IV>Idx^qk$e=k44+%=O)6rzM;We%
z&Gz}{vDAea+f-HBy762jysB*Xyj*7&&&Pn!j=dGej%Qv0)^Uf~iLoxqPv6EP<j`}<
z<zh91XYxtd`mqC;5|E$C&nW==H{OT^@v^$*@7R#ES#d%x$}i;;dE^r=Pvv3QsDV6N
z3)|c|qZ03GjE+J-&AGJ=GQ9>m!YJYCc}v?m@k)!Cui72nC&*)v>Y~!V%vMwX9``<7
zO*rh@N~&^k!n15CuD;W$Gh(G=ifIcxm9Ig<5Ayk0Pkuwf>!To}>LiaQ;j6n?j;&7$
zWi2U-RYs>^Ta~l;4$67-!Dej8d_y^Hc>KYJf~(Srl9wR=T@>;=s=f3@B8<r5***CJ
zBz%j-?V2{L%ltB4%U4)E4SRQwi(yBVY3?)hN8Xeme~}aUs|bUFFEUX%89_`x<yEc2
zNf<5zq{=eL^jf~eWgD|xC-FLLwyU6k*YHq2VRwn>@!UX-Xd+H2Qe>SNYVh*;gtXuj
z(S_A}`n=t?+S8osM$Fk7g4S_Y*lHWFR>J{6w*Ua9p-a{^U7!Bf7=i4|!iGInX3C()
znB!(9Tpc`Yk7~T(DuxGLv(^T%orzSN+AP4)!D^#3i-TM|yB~(FpLD0}-LW3JOuo8`
zvXF;13{-X#{P51!_6<~Rg>%pkOmM$*#i`LGiY$iB-+AsqWM_-pjWIB9;Dq6zD~);x
zZFg?#TrCt_v9{YL;lVPBb|CCwnrnW}1jLs!G>U<Samo8IGSigmgZLmwi>*U)Ea;If
z$lK`f2XHF}#U?ok^nMu8WkCEwS+Zz~$$U|<uCPhi6VNlkaS2gMAsnQ&m2udD<3)vt
zEfA8z+R}3*u?ylHJcm)k^VDH!Uo4a((44m{7Z)OrXT9*KDO2QvMu%l{<>X4yJB`P;
z``5xS=jF`9nsIUluU&)Q>seH{*0RFuaEN+}TLYzmgIQ!Fka{l@iJu|u9a}&h><^E@
zWAS2$zF;>@gdSPRWeksnG1>q$+zYN*^C)?l<q%-lqYw*gl*l-zI{*kzP)|nfItaTg
zQ<eZn;^kD))$5|Xz@Ob3>Q2tY*k-#&J_8lY2-f;R*kKqAP+TW>A{gy;8-pDZLc*=6
zg%%!5=PLVZJa$@RYAfNUC)&)$(iQm_1&9TvlVD_JrsO%Lu`PLyk=k-KQf1{`2LUSd
zZhHLk*rJ+%PAVN=FsWuT$FG9}<r=2Ctgo`dXPPYv()>s0Z*4M^QK3bEDS0&{gnp|a
zUA2hvX(LK>fG%oj;Qgo))op2yYV1~X9?iKai696|@B&f0+Pm9%_v*aC>Ft8<a=O`c
zMGSqm9Od%!aCqmmJ3;clFe39|H>HF%1s53I)=vz*-`@Om{1PC}L@D50b=!SH9D@UV
z0@OCy_UQYtL$%+q`LtzoKA)ddmrm-kW-}8PW9+nGbO<j}<rJ8=ZU2zYsBeJvFeeHq
z)j_EPtRH`I`XY;%(ip5^)P7Da>n7;AfjU;ci<+50v#$Nn!RN+u(zWx!hy7cwkC{ea
IT0S}XA1x>v<p2Nx

literal 2641
zcmZ`*O^X~w7@lNzKC?5sS&f%$z>63UyA#2Kc-9=UFbGLR#L(1q*G!e$UDejd&g>x&
zg9!-~h*+Kz@$OOmc|KJ=-SZI)Ot!na>iu}0=Y8LLw*UM6K`Z`qqfDmO@LZn>nNjUs
zFDw*P82_99<R|~s-*q>&ood4k_DPXsbf&TFj`USAm3cCg(g<mA_KA0WMHX6Gl~V6o
zFs7+7T+CtjX5(n4q%c%u-gUkqxy8Z8(;cID(O66rol!+aN)ufYn0)PyHBAk|K{Po{
zmNTgetR6~hN^25ql^NW5*S2PM`nh-SDVj=^A?Okw@twon#EnW?uC0fa!^{?CQfg{5
znJkMOOD9w*sT!k6^~#9Ia;lL3l%y9rCz>f*<{>;cM2=j{U?2u|e$5>w8P{ZrSW_ux
zd=9g>g6|o}l2v(PXo159hkIB*{pj9jz@?vIMH^C-A=U*^0!by>C`yX30yo<Lv@<%j
z!T52_MiQdSxwz0CVGJrxg2#A1<jO&U5+sj!aIuYFKjL?)5wYtVGEEjdGt8g&+<}^<
zFs@_x-kmUGO8v!nY@~#UI5o2~spey5ihK-2aw6uI%tQVelDtlZccWmU;Wqk5Zag)~
zCD+_Yg%}S&88jzI&>Y_TMgiiGlz-*gG5fGf7etxlM;rC`+8xniN;4pJl~c_qH4w*$
zSR)gjB_&+)C1T)!co;mENecdSl*Ek{L;*8c9x#%dB&U}&_vdXe8z5`cjCj@t*}xqH
zPS>D(Sc9@yEY8X+!=#9yWb|^3ojL$xWPq{e$hA>%>I!8-m)sx$Vys@fuha<$gbvCI
zkln5lpg9f2szH!p8|k1rg(1s?@j1)!Gv4jzGL*)honqP5b*JLOyBnxws6VJT3nCh>
zG#tentNj4Vm%x7o({<NP>f(Peeypj|;~#WN>~j2&L(t=gDgRn(6S2@KFY%mQemaJn
z_1MPkbIZZ|m}Wr+oaARpBl2OWdSQ!oT^-RSPSY(BpKObGColG;`yf^w7w{B2S)JP}
z*Pl~C6{)1xX-f5Qj`l^D28kDFKnBvgmFALMB(xwrPe_(28ujzajaGt^MdSkvjkfy-
zn$qJ(_d`?KqvFy}?9|<87)3*Y=7@nPr#AG`(06;8Ed?p?hR)h<o;oXx*#o!7v-q(W
zlmvOlmu@ZUC*HaqbP6>o6BvAdr)7sCj7NqkhvHCa)e5@%%}_N>GpYCW>y^qYmaC|6
zpc|e-IC$<i{B1pJwC~MH(wrToR-w;B_tof_xL&2K2+I){8Al&C3Gx6V(f4r!T>^kK
zI!s*dAf#0g5u2x;Y1VSxAfV7lnn|+;k@Zo)osxtAJlkX60($n{6VDR-G+_jPQvANh
zPZ1!RGM<BX0aos^7Q0v5WIwY9tnd0?)#CN+1$(}2Z^M{n4i;N({}B|1z%~!Q@Nx3u
z{4WUaS34!BUM{FVM~xXW56F3Tk6mMXb_yH4AW&&BQ@4X*gZ~Y|9ijtaqR`WYB4r7r
zNk}n9<qmbpxLBS+;HzsvceQ)%0I<c3YrNb67in&BJ-}=WWZZQh@0Rlz{1;qnP@&O}
zWeV!zyuSU;PJGR5MVdQ#=PSxD+#v|=2A;ZZXr5uR!|8<m{nAg^KjFWBU*hBbJeO0<
zfo@95YM8JW?r7IyMfZvx*DJ^pSB5b0t_M`yaFrY58Ez4<Hi#ogOOapUt%v3`#Z?7;
zvgJDUCJXTYj4Z!7Z?m`TFYw6TOz`wa#T;dCVE-+9R=sN155$_Q5~)0e+9ui!H|sD;
z{MK#}ugbd>jJSSX$#L)T=IM1G7-ZpARFBpXw2xN0Sw_RU&g*^<vv^M2L0zd)jUkn5
Hc6#<7fg>&o

diff --git a/docs/users/_build/doctrees/guides/editorial/maintenance.doctree b/docs/users/_build/doctrees/guides/editorial/maintenance.doctree
index d7d29e4d8120cde6fef14bcb1229f66269ed65c5..443c9234d35cccb0b10afa478b6a629dc7b68a13 100644
GIT binary patch
literal 3353
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

literal 3359
zcmb_eTZ<e;6y9X7v%539iHQhqU_gYpFgp=^5Z}ZLn8hWK3nGT5rn_dUOm}r#mz~)M
zMZttks5e{1*Sti@KM;S1_#edo;CHI0=Vp@iAq&HHpQ$?ao$q|-tNC{2$4kwn@aJ1e
z9y=>jbD;8so6>JkAmhrGKa_8MSAJby^%som87nQ;<tj>e-yrOF%}LhF)2N^4R^=9Z
z@0Pxy+0f)p$Gr4QNM^XTQVo#z!sMX7&XwgVDgD|VmO5;loOH!%nN2cAn)kWpD&~<X
z7*am;7Y&as-~dg^qftNC8KOJ6vxTz}mgWhLEB&go{m#3ke?{{+*9kxuI1%4V9Czef
z1uv%ADYBEetcVK3U6MzmEJbLKYn|&!(x`eBOeHDTsK3YJdnRQ@XkMfQ&o@z{RDC1}
zzz)y(ohXrp^?)_bRbLK}_A;H_mk2qXMwVyTY_WL*@y?sq-T^O-1QBCdRuI-9(+WjJ
z#%j(oir|=e0#*~=bCmpI-HnLQrBdB9C17k;J)slBeyUZX30ko<@FCSae~rLj#{jW!
zSk{Y%GO?mO-0<7FA0xR5@JqiZtS!uY-LB1Zh)8nVKgji<D{Pi_!AQ!~z_9_<pP<O|
zT$R2>DJH!Q=c6_m+vr#tX>$#X+h`dyrx<At?+vR#F%?yw`qfZ9tuh(YHu}m1{XO)%
zJnQiUOr50M2+l3U(PGZ#kxZfjN6HZ}NKo9Q6N@ND|4fj?)|evV44F3tOKp_$W1g0W
ztLQ9IHc>P1OcRPtzfC=zlG3h884iaB#fcTU3Zx|bxQmsBh_N}*Sog@UV&e1(#)OZg
zMFGq@Gd;diCn!*cltq-iUKPMoPQz-@AS-6d!E`FiMv;&Mk>X=Zzmn!O8dnyEWl`5_
zRWC}vg;|FBNxcb)s5#bf5O0|FZ74qn|6`iY`}L?E{yW{<hHKOP(!|V-x;G^R-Mtyh
z8@aK83lqx%&(ZPQUC7yVU06PF5`FLTgk&ID+RYg0R56&qfi|e3Ne-Y~Hl49uK0+ow
zC+NL-K`+!OKJ>4K36u(_23M==JoSwMS6s77hHI0t-5J2j_{f5U3}$2@!^?4+vwIN-
z#x!C{qIuBLsc((Nm1m(h=vHgqOJGp9Z+%P#wanFVdE|P2Ytmhq3-re<1ln`ttK`8O
zi7OP#@CKJ%ojk3L`4-pxvP{C48>A{oJ-n>f0>4{2zX8ocS=v%JFD=+N4P@BTj3v~E
zsjDJz`U^Bc6Jx2@HR?!pD#8^iY*?o!f<wr+W?BeQ&Asj7ES_|FCv8^*&x5Vjq0S`q
z#>}2}-fxek(=J>um2tp|3ubmzC+~O0t2%S59Bz==%WML<6+4Zq2BTNqUPpeT5_jmv
zu2hM{RbnI12O)%#FHSlZp)Up|7s6{`qN=@W2{;f=Ecta3E}7ZnwwpFjG+-iY1tSEd
zxL@77;#6FxFT}%VM3%*8l=$<zrHJquGQsdK#^(!sjv2Zg3z<Tb3W~WZmc+IC+$yhs
z<J0MA5v$|jY~Pq=6=(bTlV*-_0;y5i$}P+V%KCpP@0a0M1v3AP>V9!O24|9rmxu5V
z%LdevQd|?~#Ioxldjqtvfo6r6FgLE?n_EJfcCd^#9x~39ZNnei`}-f&2GV{%$)u7P
zNSbJ~zkjg#iEYDUVoVn|Z7X=2d}vlC?FGGsHN*<8lmuVm-h?$BlxLH3RXp~uJr89$
zW#Xx5ykK3Rfoz%ld(y>*-+NJ=gzo7Xtpm8{5j6wu4-z5TBz_gY1IlB6{UvfZ&%w*g
z?0Q^0Ia~qi-^N;cM1k`Nd_NA%jgXliA<crkuZo{$r_pcCObt=|=uC>|c1+9t6RiG4
ztUftx08*{@2ZWIV&&25FG1>~_0>s@97EKj6ADoHvzuTr@{|4B9DzMEdSi(-PHPj)z
z!iY!CH)w|KNm1QhLLUixB#w`qZ_eH%!7VQ@UPI#xYKdCp8}(gO8Sd=v=}oqo&~N<u
khhhtMfgc02j@+zos`^F?zU7(Uu1!Dq&k;&F=XwYK0x}3gU;qFB

diff --git a/docs/users/_build/doctrees/guides/editorial/production.doctree b/docs/users/_build/doctrees/guides/editorial/production.doctree
index dafa832b9e065de54c291dc1456e4343ed2bf174..47967806e04e8fbb9659f73dd2bdae20867c569f 100644
GIT binary patch
literal 2693
zcmaJ@U27aS6m@K`cfHwNf3zu-#3T)AaUZ<vlu$w_r4OYqE=!<k--6K0Xjj5B(o`Sb
zb-~a+w8Wsds=udytw%FE`{9Bej5Ct%)xGDQd#--p{pYvtR`uftnM$1%xfx28F%x_z
zE)-1K@OSv~k8l%C{l26Hv)3iIZ-VcZT4gS^Ldh^TeowQB$f})>&2^EeoJ^FmQdvf@
zWy1U5_fuhMG^oDXmQJI`z#rh>j_+tzDs7n#W8X`i*0`MHLNa_GQD@cv{PovYE1&Q&
zi9V}1j;*HBOq4DNRt%kD8BugnF7gcC@xixz+ps!`CQm-#kNv);GozeNS@2si!X3ZY
zeE&4!s$e6Nic%Rnnz4kIrCEM2*2&e&5im3(XP7plsT06;#4=%(7BnBN;2UaV1ON1W
zI7K)uD{Rh|pd*+U{HgE0U4b2g;h*v6(E<j$@7O#RY2(bFp)T28Nh6Gbf5D&fQ<qSF
z&QJVqh3dt&?^0{ENSv(zJN4}}r^eJUwQ3wAU<pkxn;P!KBFDwdmCXs~5(LsoRZ%J@
zv-RM=#l6qgBlZWT<U-DeG|LuLYg?6C&DN5RHcf`-{5yc~J%4%8;$KA?wvmt)RgkA+
zKfDLnk&wayYqG*R`~@~Wzt09|73dnz-RoP)h$1Onl8dxrHEbCFCSoI9kuc4&aIwW-
zp-Nw4v0D|^!0bBQ@;6vL_mA%hB>0|?Y3?%gRbFSyf8=BSmibOW=NT(452#@~rDffO
zzP~WwBFjMUTmBmN?oM-+gj>JYtfE@9LNbQt4;J8`%`{ky=A$v%Xj#RGbR2&<j<j(J
zTbfm8+O#>gAqF&J0Hcd-Snc34zu$Cj#hhc~5(6+GH%gLax3=T|Y6anKUKoEUWF|D4
zlUS;!%vQ$z##JpUH^Dz#c6p^7-HfG5*Yz0t<8_4~299jFc;Neu5G}nN-qEah8GmyV
zc)?GM?}%(={OHcnW(OT$n6*MqA)iM}J)LMJEkjrMy<ceVP{~GUe79B<;&cwS9WPUh
z{RVPfnkrTUwwI*o%&~vCu!<*O_9)F2y(FxlA}44n4XMK=AN)X1(wHBJC{wJAeLqSa
zxJl+w6r=NpkU7F6P4Y<A2YwJQ1L9Z0M4gH@nJY@NOl<5A8MqzcxCSdZV;0=n&nP6s
z(xQaLJ_?dT6Vposae%^E2o#CpKvRpQBQ_T{f@Yl|IlE$cxM=yub($<^ap)K_6PB+f
z-K&Q~bAH?Rb1J6}nhwtyM0y*9uclblW{V7O{R#3ZHYQOG2Qi3-A@o+p5;sNIJyU=k
z<X4A@Ww6mlV~|xPd@IV%b?{G^)=C33+>2V1`jb<c<shIxj3x#$$`NrM?*Je)K|WdR
z*N#6RnJ^J>1TH5cUcJNQ75*GlP%r5mE4J61;V)2%g#~E@!S@Je3K+Mfdn_>8YZHTB
zBtk+BtBB^GaBEBRW;C)&VcrX7Cqt#DBW{a)gap_eV~r63)@n)f7)F=V9J9Eo)j-J7
z*(C(X(Amk^>obFFJUU5QIwxFAd5&KT3CfkkPMu$An9CHI7m@QHp}&>RkVc6X0j5#c
zK_T>83F?Y@;LmDOq61V>Q3Lyfl9ij(9#q(^$2^!(En|T|EJh1h9Vllv<8D=Pqo$h)
z-L2_f-4(&N$>I&bpZk+L-tHLjfBhhe4_T$+w*^#Su*sj`TR*@1;p{a)oHEIvTvgkB
z5^Iba;O$V!WYeP`d@ts{s^+t%nzPw#SYBJMWL3?KU5#+kprU<fk&qK$-n9Lr=%cy;
z(nBmOz*GyScCdc-`T46XV4`CP`$6*#TjU*~ryA^7dr;LwA<n(#g@m`sV(K*m!ug{O
N)yGhaPc)Yd{{yzuGf@Bl

literal 2699
zcmaJ@O=}!C7~aHQ??=3A$8CB^3Z+m;5B8?eL+QEn5W^BkQc7tMni=g%&5ShFhj)Dl
zq@f832ui7XPD<}Rw*7g1q}kc^8fwGXGq0uh<9VO=k)H4V{(RU;KYm=O+*whY6R8Sj
zg6~H|#iR|tg-?G9&%#}Q)40r7VX;n0Qm~nU*&mwoDpMtyDP^Uy*!v{-fu;+ioX%PB
z9XK=0S|R7~dvhIVrj@iz7Qyd*LraH^>qsA3EvmIgqS=gTCUZtiP2uv5KQb)0NC(-J
zj4WqLSFj!^XKQB(mZ}2bg6}#zJN_d0_cY6uE|7GMi1@!ixTzo4tloH!mV?4oHK`4A
zg(AzUgy{~`TIsb@(tL6%i;`*7pV9oODXHO_)n!c2k5HqKGdM_zonG??q!5N?$Te4T
zCgyN^E5@D)n4B(&WfeACZ0^H;{K>t~fy<zP#aLR^G1mpv5=9YXHKSFuAj~!Z-GXH<
zIzMW=L1K2LkWWoO8pEb1F=E;uYZYjMmb6TG2)T{lAmMjxkg*?FnvsPlEDxuBzprOG
zoST$>@OQYiwfS-~u}XnNg4x-L((?(oRXG77C6#kW=du0*MP6qz_;GZx?rn;X+C*;2
znJ~gCjU4yUGH_1P$T@rutOmrfsPNi%Q}uC`si?N(N0<2b#vigOV+D{pFPY(tS&(B)
zomE5>q((@wL=FNFk7C4{<mjJCl(?~iC}IZBLrzOeN_NJ|aN0#@BV=nfBcF{!KJ@#s
zryEc{YC%~n7AN(&<w_<{3U)TZN)v&xD#F<I$agVu`W$1zmcpU{YMt4HZ`cV4q>0Rm
zklk(yU?q#gYS19dFO-Anl$I_D7js_XvBB?_Dvrj7mxkpsulJf>1b+jw4E9I%7Li1w
z6^9df)3on{`3m^2V7l&mq#gdplgEZ>Gx@>f)Ga3u1qeNPn2QI>*o1}2MU8iI_Spn<
zHWQbY&z(TuC#;Ax5VV}sS``j#2ZGw5h*1;(>8j0$9kL}Hu`NE|+2-@568TsDgEW9b
zB4`q|w#?UlFlUl!+OTkMJ+%jOC>dK?U{FDeELeCeFBN@CSVcuiXi;dEsPx*8SKLxn
zY7Lq--j)*R)8j{9M}691@+?eU=5MT<3vB`Ys0BYW7iBd{aKCW1q!qp(vfcID-U@Dh
z-|vVb{j(oQ1*WHuUd!(%!TCNY3u0*-oB94F^^WtHwv2KC@&WJ00-?Vd2WYJ;?Ycp0
zX`;g1WQ7gA_!iT_`*731?GFPjzj&;ycaL+YA^I4C<{X*&enYba%%PBlfT&x7O3;%O
z{b&sy0YnCJlgxWaYL!Mp=UL!}cYH5WD5}c(*xA6y2bku)n#KeI-{Ic^eE!{&zzH5h
zImMqG&-ZvV1*SO{B|0zBm%F^f@3lVp&-^|g_~C;!e*=HXUu-+P;LULlmmR<R2qZ&h
zTRUHdbP&VAFG%oLmr)F}kSv^H<Sd;>>;k{Xukjt1!AU=oR5={6+v)J(|K{KiAV@f1
z*zrQsx(3!X7MarW2d3siE>A%6)h(g7TD=JX;8M*kVt!x9ymYuN;HZo3xa&`@nC^*?
z!eZc|((S+p|M68Duuy@rS9?`5;zVkfl_GD>66SkRYvV-#Nlp3Rufml76My~tDlor0
zFI9$PqnFb<v1H0$`rB6|(r{zdO5d;O5|@p5R$h+)`q2soE(+W~;CPr0FN4g^@zsZx
zWw_)(VLN`WUF6WGKNBO~o_6^={uf%#-%j!NN7H1+-@^Yp{=E4#eh@ie&udim4Ah(&
zKe{-!X&!D}p81s;bfObKXa_&7J-WDiBOAja-ly6_d5l4U@?M;|Q7a3re55K~P`}@f
Nbs}yo<(kV*{sYP9Ms@%I

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
GIT binary patch
literal 81671
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

literal 81743
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

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
GIT binary patch
literal 27520
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

literal 27682
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
SdgleoA@v^By{`6aWB&)~j;*%<

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
GIT binary patch
literal 7157
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
IhgCZN2fyu_hyVZp

literal 7238
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

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
GIT binary patch
literal 9735
zcmeHNTW{RP6?SavezV*t4RY($PHYL$YU?ybT&EW}vQwyn9mBGMq=CzwC1;nj;*t!9
z)M`-#NCOl|0HSCSwy#BiJ_l%D+Pw7#^graW?|tq=zca%nxx2d5j)A02Wk~BKXU?4a
zIdjf=|LpJn^};FrlP)@eoy5{p8-Cyjm8H}4pey`1`#4+sW%gdSn$GyVE8>2L*YtHE
zj6_Y@kr2N0+u7}Ojw>bGK5bI?y6hwoUa&~C1QwY!=R%LSC6A=)GTRmQ9u}^sq}i3&
z8~7}Y0$bp}8sL&01xo2<EaYvGeV8sq!WLnym%3aDY+tj3Zs<ww+k*9E>@vLzr!psy
zIQ`v3Mj}TlNhk3_Iz&PGxaxPCfoHXXAohb;Sa_wf`&l|;%b3#{`rA~@+eCThK8Am1
z(&<QqK@^J!XV2S76oFpLlRn|H%#%16gSSw9s$l{~i(qOz&c_k=RV#?P7M>^&YS!4U
z^c+A3O75w2N(q~AD&*m=xEIoyi1$>GM7GG%Q-tA}baL?Bs=Gl~)Ris6K*jZ*X!0;r
z#rOQVwST1!S*v=YM5OBNL_+>`;mA0MB=_p2aFkU_XCqQ^=Cb?QDo~q<W$cM6VlTRv
z(v_V<#Y#B3tL_?Y#@@5{!~yBpQOkdo8ReS{IWanOYwjhto;11piu-(eR`Y%PbUMr9
zIFijI&Xse@_MnZ1krRf~5bSi5+j|2kpCL7%hfWd>RwPLiIL+WJ-i~<aR%yEFUV3Z#
zu~Vn+xl%#3jCC+D%f`V%vDk(F1<_v13wlh&Jc>#Cd8}V_AqhWbL5r3ATxZ;Om?yYH
z3zLw=fnM8^KKB6Fmf9qmef{+2Kq722@I28L8?1bE-RVkSDku`9rkHYr#B&%VN?Y+)
z`goUU{Q;r@vjeED9eaH&6`?C4r-B!e5(P=y)#vuyz!McC9+>Ec*0w^DFa4i45Mpj1
z8(FTlP|}}3U$;nKzYnMBz6z!PA%1_1-|P6@yq_iR)$OyS&CtDz#?_K(W83Abt*pB1
z#Y-};rMn}Zu)5fNY5aYO(p!N2Gh;%#IDGnO)E*3_b9Y9a`v^|s3reIUklHgywSd&z
zu}HmMu!5{IfmQB?h#qBdfT8h<O0R2GZb^78#<dwR7%>bX6cIUI{dzPsZ7^->SeUO8
zWKv|Sn-rJeN7#<+N)OR2?z2sbW^5I<Bof~d5!>9^Tw7;7SK2P?@;!J6vPU3BjzZpZ
z;SZ$EW5M8+J^CM<JK40h<$($Nd|$R{QSKWWBO#Ifz>VWjU8~p27aItI1K=A7j&<Q%
ziK=@+Tlzn0SjOwnmz)~H2VvZyJ={}lm8(6rW6L{;8q8oLTdW@>@Ou8`n7Mo(Nc;V@
zVHdCprTfR%L<|-C?!gwnHe{Rd2+fC<Bi|~+BL#E#oKgu*!d9C12jtI;dH3Mn-Urt<
zAAvGw+D)Wqb%Hj2KKa*CpQ}?qq^4QA@nE)-ne1Q^p}j52ycpDEpytX0n_`yE7Mygl
z?Z<RRq@zR?>v=v17FF_UIv?f*E$+t&LP!ttc`4m~lonn}kQDuqf=-&^XeW;lumFl$
zplI0H|M4`XV1jLgPHW&z%baT9H=FRZ&6p!AcUUV5x{OC}$^CUi2+|aXH5wQ3W6__B
z`xmWukS)ga=01UKG)!uy;OHFWPTFHD7YQhU1s*x~Mq_99?&~-1ZoPT4zO%V?=Z&3v
z*3Ry0x3+e6w%)kCQ-7y}q#S9SrGeJp#*cODR-=)}l$JzJm1k+>tQqi4LNDMBj)1F2
z>{zFRd3oMDKQ$1UhG>-}D-FFy(AjEC$!U&b4j-W5-4R1T3I!i5pxEakGwlX`>|VwO
z9T-cHuhL4riJ~3F2Lp1QDd8b+)Q<vl4Qn)R9@t*u2-cKMPX;<~?l&51AT`K|T4y#Q
z+#W-S2IJ^jfG}L-(8QIu5nX!H^N0~hqPiiWi^!}`TGjZiF<hfuJj%m3<<5|r=7&On
z4`7stzUB@{I2Sp(zMimEVw~5%ra_uVc`yz+0zB~DBqWLAM#BgL9My?Du?u*OWH)RT
zFXKc3XGB?{t_{*ZfH)*JzIN{mYi%X$d<tuP6cDvXpYkN`v)mi?=TDP)9AP9CTs|v(
z`={`Re*tRWI>Eq<-yU_%Ivv(N?As?=VC8(`#ec8?fd883jV4^Z{4h3LIrs15bYFc~
z$8Zuuu0E{isNhR{dU!Zv?7MKXOR60H`8cyKH5w;_Xf#e@P5foJy$WT-)-MN#F_Aoe
zm@lrN`p<D8Jb9D@KZ)(%Ji^0Qjw8+-xoiyi<*~?6g6d4*jyI0{%Aw)pB+P&FRf{(z
zoi4HLtB2p1tR_u>ED`TKd8mM9%TRifRIYu2SX*YP#J?{B>7=A|>9C|U{rq|h0hH1;
z(PJpZQ619M9LAD{A}h(W2FCX}Y6wjvgsY}-a97ut$+{?4E3-IpzyX>PL}Wo!pY!_b
zNOF39o;Ol8(WI<-v7iWVgN%?jgMHKuuTw$8#&sX1W~QIf-y~*NzV`y<hBl{41!Z4$
zfLmVV4`1|g#rU76w@|3g6|L8u@8aX6D&Dfujgec;Y<YpJbU$jQ`@shlz&Y&Q9aFxA
za&OuBsD--oQEZ*Y)(0#eF5DUF-Hep!M&6dZxMO&6H|NDGom=$a>h=>y-{aspjwx!6
z)HLU=S2{=|NDaL!QQ`(AyFlsZ2BoKtLusTKJ6&>lsE1W>_$k+rIwqf~a_2}ptl0a+
zgG*=m##rZUgc*mdC|UBpVaW#tOWrdqdG0ut94DpG((~HpNXM<Hhu(N&Yq;Y!g7*XL
zEa~~Jq37d*o?jb!E*wkGP}Ly))0U~b>J&q_8gcC{sxJ!V0m0A%q#GQ3Bl;p#6-G}<
zIP0_Ut9AH7eR-y4iWBIi(l^&$x*FzPMu&j`YJHX-nagU`f1|8wZubD7g1oLEBPRCY
ziWBak8dP4v$6W4zAqAxf|6oM;NiM?US|QKF)=0o(wzgQ>TBYS%qn2+?*Bv3w8d|=!
zp_Xr9hZg{s3}FoJObIt{Sp!1RvM%;NXY6>yxzClGD{bsr*(l8l0H*=q3_?gcGiVU&
z_TzcTT%jC+?t9?ta*=KdPf@kPG^$tKsm?EmfzzFsK4v<f(Z_7(27SzR{zf13?kDa-
zXPf@J*!eR)lJuPP9kjmf*fJGMecZy}aMSHZ8+@*4KkJtEEE<mi`iRtOzMY=0wyrH*
z3_+zbT^Mx83n=GCn(1_ydmSw=jf|G4#=b-T*<jw%bZDVy`gAlg)I1Mres8GRP10%U
zlt-_O95i@yDxFp$rk*RN7nUi@(&G#${`s-+oh+SvlY0p|!o@tptZ9^6N#qfw1!Jg5
zjK1=o(v+fcDno0~PR5i&zKd31+lr0sYtIs0BykpZ(685R=MU4xsAUs(Or@L#A{MBF
z?<ZaBfSd~fpF{WFLPZkE9~FSpMLG=f+DGRXja=H}B;C*|2)mu06WyjDcJw`g-Yx3T
zAEh%6s(X-4H^hz^h|@-^AEOl*mq1M{MuXj=83{DL@Mu{a$e5Uh%9Z88_juX%MEbNL
z6V*LEDPfUSRfwK9GY^CHr_%+G`|SkzBOp7NJvfaq1wBNf3u`%rAEnQNp6<|qg<*%K
zfQ<m^6OL#mG(0k|y6Bi&?<N?;P<XKr2ews8BAtMbjQUynjEJHj0@H9VWNn$RE_}2H
z^-a&w7KOT?3yeKF0}SC!(Bs5zwmqFLS&mf1a3JotBprQ5`1|-+(yT6wfh0CLSmVA3
zQRF);D&A^anzzvXhsG7gLIQ?45A$H26rqV(6|HFLGlQl>90VA*ks@ww1W~*0#$B%t
z0>lBPHH0OhwNyYRG-h4yVZ>x0t3~ODNnEf16ee-2cD07#8|+to<n;%ZD{()-Z=7LB
zBEUFJPG6`*;sn+~mvsIc@D4%bfQ%3(0-j0`1{H$6VYsIy4>I?%QA$`q&>c+nEQTT+
zR_#U2yDH9$Js#0q5Ht<N=PsZw;f67c_k_k9G94ypRHl>0DzbFS%12w=we;B$Xd|0C
z=g}re7s-2BB{k`32}iIvtU_5jv3u|J+EwteEqs(gjpaQ-Vulzn6{9`#z)U|(=ZXAM
zpll$}Uaz+i_HjA$wLl%QU&l%Xp)SB3NxucQ4=jI$VCWOzeXLkuf(bT^VH7;Cz3`ov
zoeYUHI%etOV8SRT{dT&D=@ckPWmL%IL1-Ekvp*QG8JRRl(&eE*<It?rdpKp|-wZMv
A$N&HU

literal 9789
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
Y{I<>aHqVa^?vCv>=o*CIm$g^^1H<Wyk^lez

diff --git a/docs/users/_build/doctrees/guides/referees.doctree b/docs/users/_build/doctrees/guides/referees.doctree
index f9f5948a636c0b1a9a42b3daddeab9e15e319297..58c3aaeb1152833a377ac61adc8dc8b5cfe3e942 100644
GIT binary patch
literal 4349
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

literal 4406
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

diff --git a/docs/users/_build/doctrees/index.doctree b/docs/users/_build/doctrees/index.doctree
index 530583818e32200738bee46ee4365059e66f342a..fd075e681585e23734570086494233e225eac2fc 100644
GIT binary patch
literal 4826
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

literal 4937
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

diff --git a/docs/users/_build/doctrees/roles.doctree b/docs/users/_build/doctrees/roles.doctree
index a3db21190ba2f7a6d9ba361b7da8554bb9107e8e..4cf8d9cc4c91b7d1a30da06e259bcc7cf3fd3735 100644
GIT binary patch
literal 2657
zcma)8K~Eev6ehs33xQoon@UxJLZbxH!?L7`stC1J4^=Nz9I7<8$nwm1*A_GO)b_B;
z0jWJS3X*Sie@_2fzc;h9Ec6m0M8;!3zxTcG``-Mq{?EIumHH?2Gm}<c<?dLUOt=_&
zv``4`<KOY?KjU>g3Y(f2!e5nmeI3K0HMwx72UfV!Xr~gDE3bq*;5s|-++7^x%6S*h
zUD&W<tg`yl=kBUVOwPu}cx}93c;({z7&cSoxmSopPhHO^bX$}U@NX^jtSF83!p8Hk
zomSQ&F_tSW@Vv(>Z~hl=XL+@bi5O#wS?BS{Tdv*M*n(lj@d=i3Z!eW9&k!9CawT+~
zNGYcU2C^@ogiXt*&QvxPF|1IAYhj~({(dA)Ax17$rEz{V6$vj(w|Jhfv&&Z_;Oj<}
z6V{DtB#*80QGWS89^vASS3VcZ*S?U?!r`x<205i9zmm@>8iK9A6*Fq%C!hZ-HVxk>
zIRPEzp?oHfs)WlExgXYR+|O3S7Wdw&r1CYSN1>bM+_?tGPJ=W-n(*|Z?eZGYfEKf=
zY<E;uf+TyXDN0l6Y`N$kaPPr#HDTaNsr2laXW5*nU2jrv#S&O_rmg-&{)nFaBww9%
z<Tpg(E()@sDY7^^4}%)|k;s%cR`EQ30HJo9#nPIrYTExH3i%zSt*astR%G#PMZN~O
z-(qpA?v*n-zlt~V6ssqpQ-_FQTj?~fGSDAdp)2Jt@?3;o!DpE$y^LpTfQ^?m$<D*h
ze7jUx1`giHH;BJJ$xRY(!bZCaz<6B@r4R=5`iD~sszD)~vZ9l9E=aqQug<A+RU#J0
z>OEcFZVNB#gopRVJcO8sB<5iwW==35-q|Vwt|5=G*($H@>myes4tT&yjAje9b?JYN
z1IVttaA8;JOj(GFd2S~HHi1fZ+E9%tT*vTmq0(CUTbW3Wtz80bdbF%?<`Brovj<_P
zHIhY?-Fu!xm&w!XC@<u`3q6(H9)5gpYx@TLbi#Y3C$Pr7g;$QP(O!VFVdEXoE3|lF
zmRpS@u*&9?>!LJL0|a#8>RcVTSh7|(=i%Y}6z#yV$7yc(1rr5VIRoX<9@5vx(6{51
z>H`;biWN|YtP1pGGcq*_{t!0Bgyu<3e0>o5bQuu8RF2qAXR@j&*`hEoUx3~O#}()*
zh47%=X2v0K&x;Z#Hqnq2o|ax9i2)ktVJ(cL%Tte~Juy?BK=YMjxwsU0JnMufO_?GW
zG*BFyDleCc-fqmj-M<=ka;_&8JQ<NQnCvRFP*12@Y4Zwi!anLL?o5&f4(5=JK<b@L
zB-I3IZ@U8QV82(GI1Vp%pc!`CiO?ZaxQgMau+~_BhI`R#);vmxAO``%E*)_&If;yO
zx&wgl1odPj<z5)DOgRD^iR-bVtJj3S#GgS8^@7gSv5j_*e1TTXPq5Z0!ZyPk2ICfV
zrv^h_cQM!|A|%|2nrPvv^uBbbqmefTvs?*3J~nnTlD^1CC_v0GmIPB^t<^lIG`1wq
zF-zNC^_4CwzkmQ0R(?EuGjymXKuOy38Ix)vbNqU^Q*JcgH1(BERGDG3f;j&f^lfa0
zGD=7Un3C&)LeN_Y>Z)0k2MsBq08`Y|!25nF%DdF=*VrxR+@Er*sX-u?-~~<%Oy%$9
z-Kq0NPwy6Vzo#3GD)7m{<}+MA5Bv9`-8&@z4Sg~nc3VnVRd9j+UH-(-`R(n`!#4nN
zBD8>W)w277dW;@m_SZJqYV>2+rrK}2dC+!qI-MSuS6&)jcQX^0BkXkO=nlL{=`k>G
zW&fCB)HlF-m=^_@>cP|=)`u@oUS|>W79%qB+wZ7(-2^?iV8_x2Q8O=S^tE3&_^QCv
USspP}*t_HUn0EAuRVBy&0o?8(?EnA(

literal 2663
zcma)8&2Jk;6nC3A{%CBcfpVdha%oi#j)TMj^}+>lXe0~K79rGXHM=|Z44Iu-<|B3v
zl}bgcRvHN*mUBVeIl{lkZ)UxA90@_BRd$}=ypP}ez4!LT?ypb#t@!7Mxyqd7!W>JL
zQ&ahF5EN9}>X+)HAFAioeSg!q)L3qzr(}}TnSt0Jn2RD+BAF>=rLwsDtnxig7DhRp
z(aN`A%us8&oWt(TwWFC<(o&gMe(!4{94@Xs-LaY%Ym14dGpeb~XktnNlW+Z@p_xTE
zh(^$4Ia9iTbflauolT&sa=5E}+u7Op)5^c6X{L0Jpi6kf?;P%?epu3SV?9Vlxhu+~
zG}PrPSr!7K+f-|%*G7~2$cW4Z)yO|3*_jc<FilGl!t(><$mI+MVqmA&{3yw}At_?b
zl$`N7%-#yVXB;A@MPg}z%NCcrkdN=4d;(m0IV8rCq71Pvh?YnyF;-Jj1PR=11JKTC
z>VomZrW#3zPH=f<DumImYZ5%h`yp43B4|lO#DmLi{CW|;u|dSXXGxkYcy3vB+V%T-
zmch7*;aC1Pv$ix3CKIa^NW`g~9V<PbFk6TT5D`Sq9hryxb0m44%E}LeiFIwGf8@q9
zo1AmQt<s2bA0-3lBnh0uxo0&X4oOvSd^=_zv`j&?O}=-Le{cN(EmE2TsS803qtt>N
zL*lGTc%GDS$(M+M1L8sOSSA_jXCftTtRM=Q!E&DwVG}{msi;odsBD02&1S^2G06IU
zKh$&s%25N#VzD?bFDz3sf|Aqo2{cUr#;O2gQzPF-$LR~S30-oF1c-HJ<GyAmAdn_7
zD?s*Pod6XyG^;^@EW4Brx>H)ROc<XtfyY*USE$e$cdj(cRbKDawW$0J^fK5V*qa9u
z4OSeE<c;0F59TZ2zk=zy?<7t0e>Qnys5X=DOh(*t@`!`blSdi<QW+buFc~lLo}7O?
z0iDgnMRl!ExMOV)?jW?fbj7Bb4(JkB=oWKtZ!`BwGVF8zL2NZHVLpzpCZRXJH>Z+n
zQuA$Z-Jhd5W)@vqWLseBSn%yuCKNeKXhFD0NS<pNN%O`JS1eLRECR|h+#VX3L{A=n
z5hl?NmFLyerT)gcjF=)I8nIwv>cRjG!?v5dQj!8EjMMh|ZEpoEd+2v~9)Iix`he5%
z&}o?bta82!a)LtIhO)hXWlo3Ai&q922hGr4wFD#mW@wf51ZnhojimMpaUB&dbi!K*
z2k-Y{?H(KfoKi`{Q!cp0xIMzaJhH@`9SLqMHo@JfIKHYkhTb^njcYxFVSjn=tep-s
zr?C~#CH112`fkm`i01*9Imgtu2>?JTW6+0d%o8AMFpr{m54o(OkDxxUm|-p73Cs&)
zXT6s;=(8T$eXk@TfQs#~Z%{M#?X!v{cno0#|1vyJ@o0ilWQ+?CMxvbeS&N-CHrbEt
zA?x{jUj@ehH)`w^d%5lGk|)PJ+_n7fWAGMH|8J|Ws<`1{{3j&#vr7r41edfrMK4=2
z513c%gk57hE`@_`=n3VpySLL|{eO+mk1*-5x#)PINm-&sB!Ck`_9Ig=E|<sXsnzF4
zXQjPy0Kg+w4bpy}%S<?YhG2(=GT!&2$fya;!}8!nU^&;4Qmfq6wWPiiMr_#sxH4sb
zy{@M0@7EReyK|vZEQ(G>%6i+dSH2w$)MZ^E?Yjk8;zJ_r!JUwUAFLu_Jjb^MO!VVo
zGD?aIoVu7^DL!B@JzIXSQF4Ilk65sGr)~Bd`xB_McT>FmUgJ#JyVL79zNnAJ_d*%$
zMTyX#gH==G2bUW)Qu)@^E?@P3D;V*;rq!eF;pN+#LDA2{w^Flkhu}D7?d5hEG=rcS
V7%_{N#P2s98MzZux#rU2e*hR5G_U{w

diff --git a/docs/users/_build/doctrees/roles/editorial.doctree b/docs/users/_build/doctrees/roles/editorial.doctree
index db65bcbe4986268b995da403b26612c1ef15f130..0d3a391cfd805f5d8d0cd68b1c203c1c2c6642ba 100644
GIT binary patch
literal 2628
zcmZ`*O>Y}F5Or+Jk{w&J-KId17;%EMa1XYeA}G?JD0=9}!G%s~ZvjE=QX=79a!Yb8
z`Cy<uw1@%T%Kn`Gx4xmYvaFyE3}?9<a^}r@Z}#`if4<&XOFyBTo2>S#aA(@&!o|>`
zg;HoA|Bhe$5pUv2*w(xh{<^~Jn;3c`SKe5~i(_jFtPNb)vSOt2^!j6WT@FpbM#gw;
zykL0c;=35OGv&EgMyIE?=VLlH$_Mzj5js{>#(H7nAnazfwa9=KN(($6@Y<UX&f8mF
zO=sea5uKUxIP{ilH!`+lSaE!eWn|IGq$+Zpjt99G+D>GY)1p|}m5;-=<r8OWn~50K
zD8r4g)ja>ym!=ebm#NA)-=ByfuPV2Ap0Bg3mwf=~`n40*^%GG21#oB9`6xeq7f+Bv
z%PU`q<pf^Hr=j=53d)p)d?ue$7@{`ciYc||!;OE&S=Y8IP9R44xqK>5>LHis@+fR3
zOfS~M4)@-wVeJ!KC!w7c+_@P@tr?00*N|tIO$Rrq#k82$RkNe6hsdUrnX)pq&X>#h
z7WW=6ryY8(l1fj{c%IMM*7hdzRxFiIF-@80@;mh7d-?LBCBGylwo#B(Dan&TI9Y-9
z4q(RfQfcMD0Z`S&zrdnr|G#@Aio#52n~>j7fx0e-!iqdztjSlv`ztK&q&_*Li|cqR
z-(dAT^j6M{VOQy_sB_4Hq(L42Sq?<#lzf_t%FB4M0jPPENH++3^X*dQIXHPMU*o3D
zabbq>Hf%Mk0GTHMD4EckV|F^RpdJ*%DL;x#S)qVhz8p}u>!DbLr9ExlY+I7?X(|Gz
z%pxz=5xRjJ!*-*&)b&GG4;?UoTNuq2I&0JaX4;o+dFjHw(z&vb74zJVg-^kI%~3Nu
zxQXH6LZ3<VJGsaVx<y(Xgu`WRGlzqGym%1y8VgyRvcKXsbeVi}6Xm5ma-pO0yWmGF
zTbnmvuM^%YJ%;-oEbMS(jrIbJ4qLzSqDC_pez-I90#@6Ca$S^0T7kSSUCI^YQx$7e
zH3$#qQM3bLkFvt>OD0OL3eXjnl+^b=bnPgk`oKS(;aZS{ObV1_Q?fHU{2>gA3C)KE
zar8mx(q%yWN;&doiplG;VvE8CVPAmK1jjXqDTVML*mlk#f6vPb5!+};1~<zt<NMG<
z<2)ROk+6B@v2-A&$`fe5cB~LrqKFr*@OW0HC<M(6$0o|lrJ{Fdw%+Vt4|@gI;~H*^
zlXKYXI#{2EP*T^t!rO3!ddhn<WCjOw$VMRbRxXD17-{di66|2V)tEI7FZQ4gcGro}
zBFngr;fb);Sb&Cm(Q7t)lw9Wp2pIM$#K8h3GA`&20K$i;CnwQ%LXYLj5#UH%j}%?K
zA@mjg^b*tyI#b8CnmzIbS}~7cjVFX%hEWT~E$B`ShP>`$uuDW3awihe!V~Fz<=*uB
z-WZH)CH&~j*l}O_vgo4#F~vX<Oo6pl^McaYk-WeZZF<#Jx~lyG0#sQ0(dp|`hiU?p
zq&=T9sm8LvuZIs6M&r$_zRHO@H*8uG=RbnJjm=R;1&IJt@?=m5daFQPHI4FkMoK8a
zl!+R6->pP-pW5Ao-Ez*|3AdUW1Y!wZBC2O<e?RY5${RhsU(jk#w`Qt{q0Q#gTRsm*
zE2pgl$$vwa%!l2T64n)5pnIP`F|>Yp`{U_rfH)Rfq&b6JKcOC@2blWFCL4{u54%+R
zT{n-LZcZkXv+CMQqf<9?an;98hmP*Si<BM#^G5cM=!|p&tcQ6~f~g)%?O^@%v-4MZ
y#5BeL4c+DoYF;-%&n?)o^eHr(3^eYVZyS7E%!gewCF*c+&-F3a=;Nv$p8W@LZ5Oft

literal 2634
zcmZ`*O^X~w7@lNzKC?5kS&bJHhzDUk>`nv^;>C*!W?>MLh=`%7>8_b7Q(e{8$Ik2_
z5Q7N`6o}ZKqj>kIf6u3?r+Yrcg=V|osd_)2_j%r`XNSLiI%vf|Kgv|<EEncns*IY_
z_ktm((w4uLAN*K8El>ST<7UQki*-sS8J!!L{js^qXG$b<rL0sIdmop+ugTIVr&C(`
z7MvMsEtd=Uz1aksYb7m}S?N1p6XCG2iFC(mo;My7P3KfonbO1*1TJ6u6GKyrbdZgp
z$!e~24(nJsTR59wsmc(p^lfM7XCIgTElpFUGbCLgB7WxxH}#`}78~!uGR|CHB!!_a
zQ^_h9Fx{qFE8RFvs!v8_Ca6aJGm<_rf*7W0Awqh7h#I+^!$C~!;+h{P88>8xTvH|I
zd;zz&LhLz*$!U>Tnq#xY<{s>4@8A0fxb!nvj3s#ya$OQFQB-2ArX&v*gxLk4oza;K
z&QI!YBq2M&<r7mPjX~9u5Hao#wQ@8;OClm3T<+r6kNBM#WbFHv%#tO~EGsX1{z%VL
zI5#o<(%)v*7Uq-5#3}_6acbx1N-rkN=3)Xw1d$6z7NPzOMP8?}^rPUS>1~XU+IVV{
zOK!MT8aW=JW#F77fphroTMdXqQROS&j@5@%CMVh^Ke))h*Z!F1GnxUZD?tsT)Pfu%
z;;c$|mJ|rdSIB__;$etbBq{o5A|-CDAqtqm^MDay6G1PjC@<RRY=Ep`GxFIuWCMQ`
zdb$DSZVk$ExjZkfEK@RqlF`cvR+<2eRRPAjN4^ck=_|;DuDC@3#5%JHU$GMqNE4V9
zAbYnefC?JKYS19dw#tDzr6sF`@dXojZ0Qe$3evc<CzgF)cdA~L{sy!R_6PQ6fkeYK
zha-8T+K<3|1^m}AUH9Fj7XO!%M}}%M`QD_&ttJmR2t9d_@~@P!5et*@0`JM?hZE4*
zOk7;96&g38SzrMt;#?afJ`AFlF5k%Nn69vy?r`|_E{FHZVxReUqUg9ppg73t(q8%g
zf=a4M#k@|V)bRq-i>@r{&M|*1n0G4`iabeZPPj-&mT4O4^U9Cbd{TLA2O2cm9UquU
zj~;#zX3_zbm*v#W{Eeoem?xkdvEby)g;5&DZZC6%Bssn?Sli88XALpC?+<tuf9wS!
zf!*<=TXXtx>3k0~1(~!B4SaiVVh0VzEyI+9a1dH$!EnDBMAOWYdR@P^R8e8BvciUL
zcnj&^ecbf#ZtUl_<*c$8O!DnRrSUULoyN$A1gcYH>U$N*B1FerW*j5kCa4MBiFuqf
zFeU)YVAw=+2kEU7ia0$jnPDy84P**4r8#sqfU-Wc+$l&%pkxQ^8?=Fa`?zEY9zz(x
zzZB1Rcr*dJDdPehkm%4UYq5K^PxceL&-#A+c}?Us5bOnezUy_%rDGm`TmJANIEVE9
zyZuEO4`g`x8L9r_W(1<<l9m^co+XQbV#)5YYwW<y;Hejgs~nEn-Ne}7e-rUz3?>{j
z^lYg~Q2=!k%8j}Cu_+jrt8);4eOu_RS8oCU!dQKcoj>9-6%Mxs9C@KJr~Y(L<r}?2
zQaP6#S_)#st>L}@Upl8ksHG{X?}phK4t6-7vcF%JQ})kG*bf&%&2R#AQ&LpN2z%kj
zdmgLiuG`>yIa%SZ5RSToP`4khvu8ZR^#RTX@$4~5iYt8eFqUSxqhLU`e5YRI0Pml%
zn{O`K?05DTI>p{h@%Bg68_M2XT*v3L>eKjsXq~+(P{dPkYij&(TY-_#xAx_`7IrH*
y@%>uEaqY?W?#%=kWZ^ngpQ$4-9Yb_mG{aiq^(2T@JSYCB)@9^dDCL@)o&O6>$SQRJ

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
GIT binary patch
literal 2621
zcma)8U2hyU6it(Cc9SNX4=5^XqlT)W@Q`d;Rj8^E0ttADl&8X5Wjtf=+RBVQ*q-d>
zArd?wHIm;jKZbwDv1ezp8ze-ks2PuaeeSvE+&jOm|MhBXCH?pz(|PS=VNaE2+y+00
z3nf=B{29LdJ=}z2zo}@+-F1c6H^D#VOge2OEsiKFrIOYeiUk`ktluzvELqz3vAr%c
zU68TXPHD#pUfJ+I_|058>ZDfbsqg3{#t-5F{;m0e;gvRyn{eT`^V%3dA%#>N&-=7?
z`d{&O7FSbD#2Ckz3C988DLdAtBv`R@f@Po><U$q<(eWTweBbgsV(PLML-E9K8alPQ
zHaQP|B_dq&8}0KiBcV$^vbn6Zb)zZIXjR$ndA?4rUXH-19o3c_J2JZ9cGNL=_ZL~_
z^3+%t#Ha7WF|hTVbOm2T_Ch@KkALXu@ZEA9B2Mv{cplH=`1(6Oi`D#(6MuxJ(i;_x
zd<XG`cqWePjEXaH=+_hd=c|5;I%i~7yTt6V@8<=zw&Ana5FVM$Xnxrido8LVF0#66
zchq$TSc6=bm97<AOza!nd$fq(@7hX8H9Mt@%@x{rI(LRI5E9R{`JRbyQM&KN%k!Ri
z71i5ELPjQ#;_HY+)n&#FXW@KByaq#GVR0)_Y_%$`!>xFW)iZzme~T6Twp4jhGiV>>
zP3e|&#(3pK0B!x8R!LhIerLW>NX8(&Tk!^$uTKh{g<HSTu7V(%z(;(3cb@Ob)Ieb{
z291#8$pjQR)#BwvtW=%x?pWH>r|q@{+ny{-4dI#)=c|aZhO7N%>#>x}fvqzOe$Xbg
zBAu`L@vp|~qAw=a?@7g^fsKfxX2M-Mywiqi?0*yd!_JS%<6Dg98Vw|R@4_D}dYM=R
za^d`e-)UP$7iI5WcZrvYw>Lpd#G&;A$?gt6y0^7`0|{F0oKzFEz5T8aj*V81LzaHy
zXIj*#XV(a~8t;?Z6cKBeS`<7ya%mG*^g~&Z)*2W7;rvwGfn$&ILeopaODYSv9xW(Y
z=z|}caUS!7HdT&mp_bT`AXhSr?JEX<h=xSCqFE93`@j$5WnlbD+Srui8CI7S=@Pr}
zdmM6)bX-H5f^!F@Z88cEJ6cvav5A7@=wA6{_~3U@IEQ{gqC08su(Z!-(nZo-ZArne
zcoEKf{z;Q2FL)dlmQ1A+3rTM`ZM@yT>URpNCN;V*A~UqpRmeY0pX9uGhPVC@`IJjD
zqoIRXpy7btV?3)TfW2)?sDu1kW42hl*nv&RT_t=k`u;ljr`#BAKpO5vtx5AJsA2^K
z==b6gi#{fRxQKUv5Sk$$7Tr7WyM##_2?uaBmhtK}uCDOkZlb!AbFA1#yGOi0Dds0g
z*A})3W-Juf$vqYr_FCp(I|?DAmM5Y4r^30)z8#I6)|k_hyYZ<ulaX*`F+u`-h5^Kh
zgldhVMTD^>Xo0EO)@mqKRlAM?WLUfL$(s|4Y&@K#9Gwv%C!)ZwLqjUG!kZ?)%JQ0N
zGApCzKZ3utVMwEbMZjrntdJ1=RzbRQ7Q|5_N;p85Ng8-Rta!C7?P20>5%X|Ljfw?=
zusAJoYFF288Fw$?MopI!x?j_c#udT$$$VOi=l<|sw0nod-+maI54lUluS#@*;j(^$
z@BQ@d$CEc8al#c(pFY6)NvttyfGMBaWb4rnemmxVSIwign$zj@w7Paet5i+KuSVEu
zQPCarBB{pUytVzK7$e<))<YaGp;QN@4zPam`Ppk0Fj6rE{jmLFn&%y<rv~a+`1EN;
eL>z_fw+ucN=7X>u7q#DC>iQUM@nfpaPX7UQ<`wAx

literal 2627
zcma)8U5gw=6rE&uKC?5sS&amYkQX67>`nw9f^UNQkcCA^A|i&Oy1QnoOm|gVA3L)T
zffx)VP#|LYoQUuKMo-mD_slFPE)3gUU48Gl=bm$`U+n+!VAM%}ep0C1Sy7r(sS0L-
zAH;=<NgI9-pZpx2hkO2}ahb8gVxN+vU^9bde`GGJOqFD&l$FZj-KW71HC-6xbk2hB
zAedp+3OPsIn{A?*R?;$A1mF9XmJTnrnLe^wRBc3}*^Fr>b4E-}5%P^cHY~S*12iQg
z%bC&@Ru7f4wX+0URe^NDcb%P`JP7_h&2ps+fUc1d&jr$*`$^5}P4u{OSh%VtwPCJM
zWLcG1y2G?qx(!NJx17qNWE%BnG=FAFYPe=~8R7XcY7}yY014RHHGfD7VQ2=dxso$6
zN7!32_e@~P>5^Dh;bn`L2UtJ(`2J_$WmsUvSX$K)>w;>DqKL7Y(JHPW%`O4mf@LlS
zKW@4~BDzw@XC?r~Xw{RLF})va6=;H%v`l;mxy#=$@poc?*bgnu$U+pBhqHk{(6b!D
zO@bf%9d2!HKA%plQV@|~c6O@te9CQAPQge?<=oMEtiM2!*O?4{5<|4TP5Duq$St`L
zMp&hR@c=D@<|K`p!~M`|P#lX2uYEUFA9tCGYD<1{Nq=wr5vwv*fT_!p8P1r6I40Ct
zMMObrq!deF5TJM*Gu9+W|4fp^jWtD)GejP7T3S-F3s#1+E;<`2Yt;-qn}B@e4`NR@
zq}**tSu7T(^`+%XCQ=G^F~v?3iLolu*!0ME;W&K>o3N#@D1cgLHtARD1O?JWWkt$9
zTou4d7R_qVAj`MPfjgz8OTxvRm-yM>_e&M6@zE8tT-9}N)r;V7z{^m7RBsVQG+t{s
zi8s0Z0LoY3e@)YM-zSavv*{DVw3+^Ba_W}TM*@PLKFY;6%Gkt($wiH8a`EXDayC<!
zwrhpPO<56DAZWR{BDAQ46u?ID$ee0}ipFsoNLOwAcEpy5%67zkXII=;>g8Yh50V>&
z1cEf-nwnqx;hag9GJ^45YvIE=#u{5%5K>_<SxE9$UMl*Gu!@QjSPRXPu3r1eT4<_D
zeL|ec?p(pJdh+<|IIQ-Vya?wm^EcW~W6(g0)IzM8i!(OP<3ZtSNh{o8;&$7s-kN*<
z(C>*NJsd=ZLH6mU--!KbaDD*&LS@><&c1(Tlt*)>SH`)365+tr3a0+e=%#kaH2a3l
z$|@_CSE%qpKVC&RxW3&s_U>*ww;!Ecd1Ns3x6hw8@+5Z}rvu!wI&jYYV5P@I+L4fj
z!1T8SRia-B*>OuO0euE@DJ}N^cnvWz_dIaJJH8*~6~|9|K5Z!GL)gAo(+D8&J^mdU
z!@qwTIKj_QPVq0t?+5%e1>ZRrB~&5NvwOV5?>8~|FZ>}N`rBVMn!o$Sj?x2v#b54*
z--_+HM}m&ue+)SS=YPa`71C*raK8flZ!V*l2tu-O2H#pbkGuwcpI_s9E<?yc6t{9X
zr+1<9(Z3?{hnQ+OrP#?r)4E0<Xe1zk^oOSALM~5Xj`gQTf4zH?0Hh{98aDlbka_9w
z$$|4SwW=TIWIV(n{r!2VGEDe>PV3b%!C(1%|96C}TD9iV4=TFEM?yT~u1Cy%yw1!;
zf$s)n8KpzVC|O?OZh*0q;o}68vEzHqCI@Q%N-cSN*5&W`-(Z=)J;&9bD_$9Yi}>&O
zi`A|1!$`ZmtWnW(DCOMv@wUTKowu&qb8XyC4C054N7LTp?YB1$9~JRCs5wk0&@G1K
bwgtwGgBz!(Dqd25(6}sVC6;o{WvBlD8%rnU

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
GIT binary patch
literal 2579
zcmai0T~8c06eYm23xNgFrc#xlkSML_11zbcDvGMA4{ctMcuFhvA+kI(-nE6tp8A7b
z9+29HN<s2l-5=9`*JJO_u+T~+LSa0<_POVtbMO4N{?}k@CI5tBrAzOGv?oee%*HTC
z3pG<N{u#geJzmG7u&HRx+*O0u*D>s~N;qu<m4{;{rJmY&Zo`IQV^QS|pW3Us(2|U`
zc1k-&@XE#yF>IE?Q75#@Pkl!x>EOs8;NMyp7}jXxn2G0MyY$8Y1Cc^8JnvKQ^uNyA
zSzgU&;*4=RGvj#V3{`flO--<3=>*F_F(|o^6;8(kUkQE7%7m#)mk;@quxaSjYHvyw
z!%9N97B<@FUq)QlY-CH(XzNB(R?w!g-Sc9dT)rBCN;~qF89OpsGCS(1yZwtSNIWst
zMgIARcmz;AC!A!<kY4g<VgJXD`F9KE6Egmszes_ITYt}Hsc`?b^^Z8O=0-ykwUK|x
zpYbDKP=3k}!g^-<Y&C3A=Zq-4%OoC!ekrN7bLx6?ZWD<GEic--uBF1K#mYDB4(|)#
z8I-ziv{%(~D&OJW!)4%M*EU?J*$J(xg$nylm(H*y3Q|m)=qdjmRr-OyI_vSTlS2DQ
z$cPM*f18jfUl+`<DxR(I*P!MbEN*2|tyc0X-tf0rJq^$Qw=OYk3sp*ALEk80&a<Yo
ziZzZ$@YOGAll5~Rb`~4Cs4B?ohQGnB>l3MqcoR0-RWL&{>I5w8E)qSS8mI{3rwMC{
z%m|T;=daFFiG0Dju)L>F+igppJZ?Qn6A_3#TSf31?hKo)fpQX$tS>AWf%&x}ooV{%
zuep(VpHFPq6RHvh9wCmJ33EAkr#))!?dupGc4o^4-l|xsO*T91`)Jvy#Nr?q&mM%G
zwjXq-?A>b}=`#NII`RoWuwfvo+u+Cdwzh8|I?J3BYJz6A-*vaK(aJFhF>L%yrAHyV
z_O>-QHt|L#tX*nJ;&8=<%~&l2){xc==i%WZD(yhn<5FsRL0C<NB+#)z$H65Z!_bV&
zlpoZnN~}O8spCMPWR`kUI{YEJ4PlBFGAZ^!7^cg>_@%I^)ux!r*A3|sI}dvd0#9^Y
zL6n>^2Z?P~6s~o&ZV<7Ff|O`Y<pn_OqHqqafh0fD(qU<z&4f#&Id6$%mrTa9UU)K3
zlS!6FfF)Dm_)^l_^B&#qUky8ws)<Ky#mN<V<tlWaXG-?kBEy?-fPCsZ17S`Fu|UHB
zy;rfqPXK${)=&re)njm2yx4(1$ZaJ;FFE}xhNsLJZ9p3CMXkyFkyBMk2r%rW5R1;m
zfmo(HKnN|6PnB#t2)m>bHW3csYAn*#YfN3@zuioAC+AeLjdl-ziBc>gNY@Xx2_`2L
z*U3E<81}l$!FCctK`qNd3s1RojeR>BIju2$1#{yQZ6+h`YB@pzY=-H=h=6L1qB6nQ
z;#6WJwzV1x)p*xYfDFAGAHO-a$R@x^%F!9&V!|bU9XgTJ3UB85HJ15GlUbcK{|Wr9
zO@%ZXSOlD=RtgEhZw;g?W|1GxMF|J!I!goZhYf4)N_&{OTgE(`QlnCVAS^~}MD1$t
z?&9uc+^Ff@gzndLWA2I=`eZSR`HOIH@3ebC{O>SK&4=8k5>^Ge!0@hqV(9(!{@w8#
zkT_wAp>t*1eU@sB8eoLyHraagW7tl)-&XUmt>$z(J!!5S*D6=DVwWTAw5aF~dXZ3L
zaNgSfaXKU4fYw7CtD#f}r4F!u{Ke_(Dq@IY?uB9dIkd<-QBMujvGiRtpABjFwI3?@
XDp-uZc24-Pf2ZqXrll_>U!42{ZR!KX

literal 2585
zcmai0TZ<e;7@cHyb}reOy=Z(ff%qWAhuw+bgZQj@$igBd5m7@?-CZ+PZgo{#mz~*%
zKnw;FC=juIPQ-VAqo=B;=dvg+G~4w})pt4HIbZdQ-9N^|PWlVuLg(HIX-}0dn5{!U
z8cL>I{d@h%&-L^AemJr|vrahd(~1;qYGDqC_NvUZBvY-O(hg^z)nQ=h+-h%fR)-Fp
zS>~KjGx$AP1)3VI98*Od_P(Lg<KQaNU1vnO@<<GuGQ(8Ph^;7Gz6r;c<qqi}8_CFG
zs!a*&f%dNQj$o@U5Uvhg@1`f8*Wo?Ga%~DET_GZV7YKJA#ucm9-lOH9@MT3R%Y329
zqLeV*Va8~)a!Q&dr>c<5p#F^J7gkcs4Xb2KFN{#5P*XTaiJjdD2c!^|X2><yYAR-M
zdppLS3Yff+#IX{G9S-+lKl%8<XTW7pz+xROtC;JY8ik^Wb%xP0S`cO%fNsGuADth!
z-5@bLDb$6nk;bs;NsO4z$65uNU=)=J523d48zlTrEHVxQM>8@Ph2!;EKkS=n4(B$d
zUxz!~xypVqnK-RMBEj7BRGZm^yHZYoh@@)f=`7Y?pvap{)nOc6ta_W`qc)K{aw)8E
z+91b$v<#e6G;$8>fir+O7FE9v-Bf+tWlL%t`N=2#y$Oe`%vb@Wt|YUZF$Z#tsdt))
zf>a187RW&W;!%uPksSTAi4wP#5Jk-3dB~}BM6ydJ>$5I88zEb<8TqUo@?qGIJzaxx
zuLWg3pPyD&j%$@bDcI!%J8cBU=?G)nqtJ!o%oSw97Q&$b>bzZtZ`cV4l#R@akbT$`
zz$A-ewP=vz8|6Tq%FzYkV#XyNSBG7xqcrYb6U%j8?=`)s!!2kT?2qg%B8f&z4kz*^
zweN%Z8u%|^x*2+;7612>r<NHz`O)UoFD8!#2t9e6i?6kH2@9Kx3h(6d(+TKoCq8XA
z8jYK<BC<eGxqc&4CZ(R+Q)5xeD2@T;%eBxB*#hp^7OU@Uv-(=0{LAn`lA%xtokm+*
z?CUU?F~tmRxVX2{?!gT6j4d3HC^3;7xOh94nqClAQXvT~3d0hiUWf6LVY*BWLd(Y6
z0|is+>63?XO6@RpS)cnX+*-9569y!t4lK=l9IkN?_X}SsT4IG!+g-iwEkWmx!j34?
zkNrq3@I5VhEz6(PKJ-Cc(95{k()X{;@TkgkWRwd~5YlTb823j}Myu)4?i;k0CMwKL
zRyfd$Z!w*Cc-7H+%RX+}PFkDAeBZokR=&o$H@FBOjOK1R5B-LE38q7#3V}iI2<k$I
zQZC0UC<y?w7(vOrhZL7dC9Iy;-11K7MMA|%v$~4bpz;9}zE{zhK+Sjfw`c|b?pe(V
z9!ojJzZ}mGcnk%?ITsQ<Q0UTq-r)~gpZpj8h!4WiS1rBoJ#0u_^H==kw%-k>o(FjD
zgxx1#9uoXF2e0aMRm0D(NcT6NQOI2=R-ZwXj?N;IHGjZw@ExDQS3eS1dtAcX$?@TT
zrV<V?vTy~llewW)1>|WgIb|0PY{i9IoI(K0?}*-V_c{PzObE32g?*uN>G3^*%P=*k
z7l&ZHp+WE6nbaA^cQ2<^a|iHO;iLbZ4^3B==!Jes7r6T4&2=*-8%E2JTom{kfcs&(
zN~~7$3adV5N`_Ak%)3t5Yd3jd@>goY+p{iz$NvVr{Ovj3{%inc{4M;y<1d<}4TFfc
zyQ)yibCBZPhS8>cQh~RxYj3H_PIM9mtpL;B<IU4+`3{Ttb<<vvV^9<maFgw$R-Ubl
UQxz|1*lz`uND@oA;j`0!0GtUG!2kdN

diff --git a/docs/users/_build/doctrees/roles/production.doctree b/docs/users/_build/doctrees/roles/production.doctree
index da2794c67863a746eeff0e7245748f2dc3ac224e..1398836f443dbe829223b4125d08fa7fae1f49cb 100644
GIT binary patch
literal 2636
zcmaJ@U2hvj6m63@cGB2M3PnO~)KC=&4~bJ$p{ha%B!rNHA|48F)o6Bi>=|WuW|@!J
zd58oLphlWEmY>6a<J_^=aSS3=l<w@@nS0MY=iL2u<F9YF@1>tOC`=x_D&2`Tg>X&m
z(LyD(Z~kmP`>nZdj^dW)mGD<JUSBtHuePQLxmQLXT2o^2+{H~RMyg2f-*;D4W=b|P
z#%tpR!z<UkZQ@q0Jg2bq)b)H!=Qi>_{;kKJ6}7Qm*ycR$<iT2`z)GbBp7(k1=3nRa
zmsiu7IAcU-raT^c%e5OBTQRISKE^V#=;czC1y09<ycfGpq*4~u%7J_ww=ADH6KpP;
zc#kq%kDKlD_d{taF?6}Ajq}5a$ar15#q)ffUA`CsNjD5mST{^S4R4V<vCcR0!?(>5
za_D&FOR=26bNMvx{kV!V<sm<k&nOOI8*jvvy7V7Ae{W`;+pIa^*vL=hQ+X6JE>Gn_
z+(@vVt;KEby;WK839+Nt%}egw45!WvNJ1>*`9<5rb?P!L7NKr;gpeVfUT&(|1YIl_
z@)hnqT+Tc0x>_ndJ>f+$XI$5t+*`2(0L8R*p31M$l5gdUvyS|n*w{ruR;475&f}-6
z$S#4*T&RV;RL)q}`~e<4|G&*<G*UTwg`GlvNhRt~Wx|T0IlCuc0`f1gxSe|Cj4rR5
z8~GZmr*Uuf*e32MotL42C`cgG<{#v_h`owW3sHO7oZSc7ye2syvHpC!R7C-1-pE(D
zYGYiQthtGs?J98Q2?NR|?#^L5o>&kNy5W={MW(b+L69%bso^0Li?Fn(%iC?sYCcY7
z;FwwH*&1Tkab?_UrI$MY(1pwa1-ORMY$3NU{cmOgvMVoK+*7(x7V2W2+p+K|xZfT%
zbA{_BK3K>!Nq@T#xv|M6fXl;Wi8F_TJR#R_on&#!-iqnaW%BiPBQNBEi#=7`20vQa
z+P(pUo$y}iF<fweVT&Vcv=?A?-29oB0o`2q;`YoESg<AKx+snG0*PI?l&b?<Yt}03
zJU*C5(GG+?%1gs9n5eia8AM^>Rk-9`9N1A#^?`vp#|l_NUIkLJDY+UQ{s2D3gyvaE
zEWIBGbQur_=an~PrTrpQHCq&R9`^)DO>kU+nNkQ3hHVub7T|eRBVr2;$zf{w1(MiB
z<2-DJk+^y8v9vFy$`fclI97^FQ8s6t_;^;PC<V<9$0o|lrJ{Fc?%wWSi~W-8aeyh~
z<N_|c2HK}#l=L;P@FpIhp6bphnZdyvvJptVQ-~~#k@k+Ozz+6Hz{qiU(T6<PZ6{)f
zY~!klPlUC`0yNx<UbESw<hm$9z_>>t4mK!}aY=Uo5T2o)f>hg!yR1--07v3_r0D8(
zp)c`gH$lCiGj(jU-6Nl)74rzznnK)R7`b5Fg6`B{$m=c!J4A$xJCTSMpGfa(_j)+=
z#$aqK;YTONj)&4$<q!pkDdv)33aqu7mz2h~<Ryk_+pB@nb?^%aP+{<+<5$NH)kG*s
zdp>1Sjb({n4<jm##+zAvwG*K*Y+4cL--Eu5El@@ci2zgbWl#uut3h2gZRFvMlu&@F
z5;gFCP>cF5wFe2i<(vl-ZZ$Os#1gzh)UFBsZr+`gH+p)vpw*sk&Q#IFE}IW=`79o+
zoVF4q|BeGPA9h<xTvKp?!Cn3|vGdcL?~Y#q#Ieu<&Xr{M0reO?!0=Bt*=qD%+@acU
zyLs4lb26En)K^{_ow`|w%OQ3;bhHmIQhEf;TiHLNGtv#P9_B>_rg|{7hxOx+PhS=d
xCNhR-9JC)&^STLoZo!VFFQVCKpn=zZ;@}HoKJMBv5#s(G*T-O^Z>*4=`~$c499jSX

literal 2642
zcmaJ@O^X~w7@p1Ud}e2MvKlWY;6X7Sb|-=d@hl2i7y?N|#8A|9*G!e^u4?OJXZ8??
z!Gr_~L~PGdynEEY=Tp_wJs+qG&33<2^?p3h^S)Kjj(+`e(29S4l&Zv8k(qO;Qf5lu
z3x=FYTmDjh^h5cyyyI^eH#1gPtW%PtY;IuoV{?_yR7U1XS*a}cJ}!M<)1^^PC#>`>
zI5W&zAs6s_qX{(EN?In<(s#b1nZw2=(rv3n-gqRM&6#F0VZ;;^E?@go!xD>hkWI$O
zYOZt+>xpu<aF$@HN)fK~ZD;3apO*eD%@U<kBwZjPeisNg^`n9n8}Gq#lDfPgg<&pL
zWR+(y-C|lR-8d!HC#N#am`43GnmjQXHC(eI3+eeGY7}w~2QjgW1AjtNVdxCGCQ8o5
z0&Z`H*mD7s(;2ZW$7YMoJ=o7axcdok>8G$5OY<V+x};j7C}ON;G!GVp*#)4TvY89c
zPir<v$SxD|i7AoBpyDJ%jQc~a0wicjvxtX~yZH4ZerE<5`@W?!vJ|Q1<wegQ>v;m_
zCZ=EdTin{hd^VX_r63}~?EGBm#e~~Dn*foF%7vqgP=AUduQ6HrQE<_48{?xkkyvsm
zjIc^0$74_i%}E+Ghwr}CfH)LYzVhu@eOP63sxA56Mg6_@W0ucY3Z$+wW;kOO;uuk9
z6%i>Z5K^p=g8;<C5V0T$_%l%w*VhmQ%;0&zX=X{rE?HJyw83nEtWh)a**N3_e;hd7
zfbw1q%5u3pFRm<CGJ=w_%L!JR0E|@u#+oDFM#t$Zv<X`Yivp;1W)r?rCm@g}C@Vnr
zZdCxwSZG!Qf-K)E2i++xT@fx8Ji}v4f0U`v8n^eFWnb5wii^@;M=wMDLA_}Z(QvKd
zDBjrZ$56fk{%e@7`7WuO|K8-0VcJZ-GYNI8$pZmFPaY)VzA`pqVG>c`om_rAft=06
z#pPOoxJjW^>L78zrVTP5hOU<`-}Kd(t+1Qzi1^m7i1+H^pZj-W*9nP8agx=wz4HA9
zlT6b}dYz_KPZk(oY-Le+jsavLy_-p<=o7+nDl$UTRI{j`SAMh>l*%I?U}&^EKQNRY
zJ^UgJr9&n!%c-0B>kXqAD9{|W5arB;SsLbUFLi~aIleGi+s#{NjWNIH4@DY(>;)x3
z-tnVbi~4ctd=EN>nzRiJzP&fHLled=!$d%Fz`L?wy59(0(+rb(UB9+eQDLsK!iH{m
z3+do}ydm(t$movgtTGu4^X+q`@ia=D#?(g_R0qk__bQ!5kj6r$0#n@*R0V!wCZ`RM
z1aKM5n`rJJ!F5Uzsi!43yyd$=PGPJx=gtOF-bXuk3K|k9`62%rMDTAOmz>}+lvDgm
z@O+C$Q{bC$kwFC#9Npn9ez*3?f8_Ug-;eJ%T3$oJU-0L<Znu0o?%}xQj~+sH$nRhF
zzbNCW3^zX^*`M8vqO*l$<puiB(nY|r<ahZ2KXfy=>ILyChx2wfH9q*yO#BI^6HXg;
zw$!vJfIAHZ$K?EpDY%fUbBKR^W$3O~Zvp_sSbvS4KNd2{9Ig&H_X0I{{D=FkzSZ@_
zI0VIEpfqj{@BiOQHJ^(FgQjG@8%Ah2-{F4B|9V+Y`QI;LKU!pJhJ&D+&?3@4<uCkr
z-)Y70nhM{`=?Zs-aO53?(*1B<02e8)5%4yMXOK}cyTVrw(`kmg3I=7%cj`qB2>%fo
zeRI*~zwtjo7JoCv+wT=UjK8_KhR<i!r}6#3p1mqi#Zw4uYW#4!5u>Va?sxIJzgxkH
y@7Jvy*Pd?g-VB048m>k4**b#UF-x~QXIM9SJrH6Q&#6DIn=?u-lycx^=l=k%2rnG~

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
GIT binary patch
literal 3960
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

literal 3990
zcmcInO>ZPe86K}aw#T3QkxdTSz#NF=II(AuazIPqggC^KiIiQ05Sva-cg<9JyQ`Y2
zYI}S@A|YfQr4ER6PDp!6LjD2bH*iG!0K^q>M-c~}xB6?w33#O_mPXV4y6XLW-sgSi
z*DD`?xZ4YVekaj!;bdwLl}@-V{W=LUu3Y(1`O-V(ugX1t!xm%fq{BI_qJ&Q@#QwTH
z&&E29CR#hC9qv9X{lKs@s|yqJ()Xaua_6L)Lhp^%(8OrvxJpXD`csw`xY$~H!5Nvg
z8Y9Ce+;A21$mR?xKkzp#j~(2BHz|*16Kyg`cXi?N!bLc$6PPP~zi^X-@0I?R;juOe
zoX%kp|Cca#?00gWciKs^n-p0d<(3zTj%Ha3(H(A#Hm%aAdKFA1DL06J%;HBjWmXuT
zr{tdBMvPKTpddJQwB&cAL|Qh6ud!AWIfdHWWP2hZDoh$Vp5d~?<#ospUcCD%@-j#u
zv5sXq`Fh5TLQs))hO>+$FteC|e!|BEDZklNBO>oosUF!9ZfsOFA&cQY#VSz*qgWd9
zA=P631|fe379RV7W8>&dCQg(`>we2jVko!4{nFnN&gJ&rXymj8h$MHDLv5xb;j(mu
zjHFCW3pS<r69jpUtJ3d~ing}FK4O!xi%zALP8;~Rg^~etiV^1UK5zyprl86T-w)B#
zDVs6lqF)vPe;@ekJR9=_nL1Co6`VVOV}}(^M>2_Wn3Oa4Ad%v2vY1CP>SqHaHtQ5o
z&Y*ciu+&8<Kjmq8)JJ70Wi6WFPp439_${hwmy}_Xl(Vz5!~EO{twK@~emcTQONnus
z(%96<_tA0Y9Bsm9(jfrm3fq~l(1{c%OUR;>JzoXDQ%=olQ6MMg!a;W`$7Yd`Q<381
zO23k7YK<2zHOpmOuU54v{U&-D=qL0h1fuO4!vVaZ+qZyxjr`YXy5`rSrup9*J+R!^
z(TR;&F&n)p0qD`2v3x^Y7jj`^nd3P+{q6{Gwxc2(HyVW-<whq3Ag<NiW27e&8AIox
zv501ym_QX-*K61L3>x_Yu<tAa`%<jpNB-H+iBiFOV7DgT3qP20#SN?AxZ1Yw?i7^9
zXAa58KuQj9yd9^SJ&Jh7WE!y~F+5=E!tc}|(^;qys<yMpDIlr`_kT=8wanFNd0dSB
zW?N;D3~<OCfI2RSUx|y?lOk6v!yDMP-#)F@c^9wyWtoJ3t`oWd`S7yV0R3TE_;p|x
z2s4hV`phL7r^XCdwqpqtq6U=&jDLeVsU?`^+@O(ERw1su!i6<@B6rC1zGD__)PCRU
zsyu8;3&QTC2d%UK@6V5**1%3&7z_wBOf_?k{dxt-kh|+rB@zR`MF<vU3l83F^BW<H
z7St5PtMI$>v`Qd67FP898o`VxsGU(=s>J}UznU}hpcKEUrlojayiWfRkHxb18L9dC
z!%{@}6ihID#rXUJAIDIMSjZH3QK;sg=!v_Hl}d}h^+wwX!=KdfFQNHjQS+SILi`T8
zdw%6UFbb!?TE%b6FxjE$Bl!ApF=k)~sd#yW9(HU>2`<H5u_Ts@F|-X3B%2zRi#89n
zhd;P4q#e?1Cx{P0+A-kD?a&E64Bd?44)^!JB9Q(4!>5R4PdxE2K9!NOi|TVRc-l)L
zKH@wg$2R=~|J?uZnOy$-iu6CZD(inHgdpqUQ}HJ_@Wd}2Uh*D-V$8)SM}3_6tS-cR
zB)A5_yR~2eUv?2+h6OC_iQmry)A#R(HbfNfT^U7vw#(~Z;rHLj?@x|4;6?|K&2g&Z
zN7W$iviSaS-3eEj>iNxak)|A@M1tJAGK4<*N9QOt4)s!vc)wa*EB(@b*+73lIwB05
zY)+B?!-HI_;h1BS8e-<lsp83y4LiCS0t48uUa3VqAb27%Y=)<pI^Y08GQk>m^u!J)
zI!*N%=_BDi5Xil^rIJpvbY3lHi!;?Uv%}Zw16W3y5%<HlLmT|73vw<%Vu~uRKh9TC
z{0H^>;{V^E#)-b+pgYi>tSt3<=(=y*B1Yt{&4pC6LyX$`M+^2ZP(60!8LBW}_3wX;
zvXp`1nilhGQ0>lhEV0XEgerrdJA9I8%zbRN%hqA9q*Ju8V=dUkBUX}BVvv>>3$Ueo
z)l4e=%`Za&zl?(7xb)w7nvDn$d0Z8sBL7vX0-JYzbn+aP=kdvH`f5U&cWKYBgxsBc
z3nwu3Tyg*xO5OqRiU0N$=$=Ev%K;5F$DO={w~95k#HS~>!rLX%tMMcLQn4P+iO(v6
z{CD;B&!FHK^1oN)M_foG)No-TE($-O$wgHPJBKjG!W|cWdwy{V<No&Lt*73HdZgPA
zn$@S;80K$xi_=CzKP{WzCp(ys*gfZ0itT1GY8I$4nlG5&YPOb8BnoM%7$5!@U-dl$

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
GIT binary patch
literal 5085
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
L^#1G_cG>?w&sd_q

literal 5136
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
Ofc(Clgl{e%ZvG!yhX|Gc

diff --git a/docs/users/_build/json/environment.pickle b/docs/users/_build/json/environment.pickle
index f36a141abbf984fc962c8d776603592c761dae06..9bc8483761f10f56655e27f1e56548580c0aff2b 100644
GIT binary patch
literal 27542
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
R=o$wa6<dnvdut0*{}1Tp`F;QZ

literal 27544
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

diff --git a/docs/users/_build/json/genindex.fjson b/docs/users/_build/json/genindex.fjson
index 76611224c..04bcfd228 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 7a40597ea..b6ed3ec1f 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 f9090fd8d..c123a28a9 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 6f1a67b17..303051545 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 ceaf298be..474dbbd96 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 86dd8aae9..bbca9488c 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 62a83e26a..8a47dc5a0 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 1463d1ff8..ebe467454 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 44d62abe6..94976b4ac 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 654d1c2f4..26f853964 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 f86b0dc65..302966abf 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 12647c39a..5cb8e8b14 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 3d7c2eac4..26d341433 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 a5b8fb752..d47aeab3a 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 b92b94ad6..a74d79f72 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 b7e7df3db..9b2da1cbb 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 7ff3796be..163bb326f 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 407e6d081..53e6aa9a4 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 b8909616f..ac2c69c59 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 6a85c32aa..6693b0500 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
-- 
GitLab