From a9b3cb9309863048351b3416006d9fad52874e6c Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Sun, 18 Dec 2016 15:10:16 +0100 Subject: [PATCH] Installation of documentation via sphinx, django-sphinx (sphinxdoc). Haystack search facility was required and is installed, with Whoosh engine. Requirements updated. Instructions for setting things up: haystack: http://django-haystack.readthedocs.io/en/v2.5.0/ (choice: Whoosh engine) sphinx: http://www.sphinx-doc.org/en/1.5.1/ sphinxdoc: http://django-sphinxdoc.readthedocs.io/en/latest/ In particular, a Project has to be defined in app sphinxdoc in order for docs to be displayed (starting at /docs/). New host_settings needed: HAYSTACK_PATH (for the location of the Whoosh index (suggestion: project's root); make sure this is not readable by site visitors) --- docs/_build/doctrees/environment.pickle | Bin 362911 -> 378954 bytes docs/_build/doctrees/index.doctree | Bin 4839 -> 4861 bytes docs/_build/doctrees/modules/models.doctree | Bin 94743 -> 92365 bytes docs/_build/doctrees/modules/views.doctree | Bin 97884 -> 95782 bytes .../html/_modules/commentaries/models.html | 30 +-- .../html/_modules/commentaries/views.html | 85 ++++---- .../_build/html/_modules/comments/models.html | 2 + docs/_build/html/_modules/index.html | 2 + .../_build/html/_modules/journals/models.html | 16 +- docs/_build/html/_modules/journals/views.html | 11 +- docs/_build/html/_modules/scipost/models.html | 197 ++++++------------ docs/_build/html/_modules/scipost/views.html | 133 +++++++++++- .../html/_modules/submissions/models.html | 68 ++++-- .../html/_modules/submissions/views.html | 27 +++ docs/_build/html/_modules/theses/models.html | 2 + docs/_build/html/genindex.html | 14 +- docs/_build/html/index.html | 18 +- docs/_build/html/modules/models.html | 12 +- docs/_build/html/modules/views.html | 15 +- docs/_build/html/objects.inv | Bin 1191 -> 1260 bytes docs/_build/html/py-modindex.html | 2 + docs/_build/html/search.html | 2 + docs/_build/html/searchindex.js | 2 +- docs/contributors/contributors.rst | 8 + .../editorial_administrators/#production.rst# | 8 + .../editorial_administrators/.#production.rst | 1 + .../editorial_administrators.rst | 8 + .../editorial_administrators/production.rst | 6 + docs/developers/codebase/codebase.rst | 9 + .../codebase}/modules/models.rst | 0 .../codebase}/modules/views.rst | 0 docs/developers/developers.rst | 9 + docs/developers/maintenance/docs.rst | 22 ++ docs/developers/maintenance/maintenance.rst | 8 + docs/index.rst | 6 +- scipost/templates/scipost/howto.html | 25 +++ .../templates/scipost/howto_production.html | 135 ++++++++++++ 37 files changed, 649 insertions(+), 234 deletions(-) create mode 100644 docs/contributors/contributors.rst create mode 100644 docs/contributors/editorial_administrators/#production.rst# create mode 120000 docs/contributors/editorial_administrators/.#production.rst create mode 100644 docs/contributors/editorial_administrators/editorial_administrators.rst create mode 100644 docs/contributors/editorial_administrators/production.rst create mode 100644 docs/developers/codebase/codebase.rst rename docs/{ => developers/codebase}/modules/models.rst (100%) rename docs/{ => developers/codebase}/modules/views.rst (100%) create mode 100644 docs/developers/developers.rst create mode 100644 docs/developers/maintenance/docs.rst create mode 100644 docs/developers/maintenance/maintenance.rst create mode 100644 scipost/templates/scipost/howto.html create mode 100644 scipost/templates/scipost/howto_production.html diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 5ff5e6a9ea55399cf327919913699348eee34d57..2b504017332c5958842ce6f5e385ed68f60371fa 100644 GIT binary patch delta 27997 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�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 CxccY- delta 18865 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 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 82cc964c8abcdb3c95596212e56f62622823670f..9de7c0f38e1f089efb45c39a7e8824b3827a63e1 100644 GIT binary patch literal 4861 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 literal 4839 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 R(%L#?+@zI|mdSgE{{iqOHah?S diff --git a/docs/_build/doctrees/modules/models.doctree b/docs/_build/doctrees/modules/models.doctree index 5357f423e252b5f59617dc9480bc463237ec1177..e20433445773022400c62eea6b976307ff0c7dbd 100644 GIT binary patch literal 92365 zcmeHw3zQs3d9EK?Jy!20mLGVK4PKem3L85CUlLoEZ4fp>mMmM?mdCv_z1!WIof%Kh ztakkb5|cGFToRg?5GPLTYbPWDL*Vi_gya$exi>F^AwWVxa!H7D^SVyRjY)FCx!+&i zU0qdO-CeVzk<6ZO4qk0<_5W4<RrP;gJ-X`6%ieqXX{Vn?{|naDTeV)-ZTJ(-R^9f) zU?n}6v76oSJ>kx`g!hGG!J1mH)4`K!!)@B({$QnVce`$L8mTw(*QYwIX4h`k!(jQ% zR-*?~{QXtacGK=y-Bt%LuXCI2UbkvDYpptLgu$v_cWT$GcKI&;y}_QDwCh#BJKwN< z$F{rSL&4f=t<{`zr>j#g9)?H5V12ze)2_CCyH{^j=VltPy4r8`IyIYecnrU;^}8Ln zU9B}N-^V-qgEjt))#+C6>b1J~{UH>aOt{E#r)f1P#k%;F)(jP%J!#wRYR8_kQT7_M zvbEM|S;wmOjO8|}R=wV_nfZlabH}c=I`wMZZo>sg?y~gTD9b?c?M~NiHBo45vSHW5 z1!T~!b(_7J>fBVTGZS8ada$<Js#Pbg+A%5uJUfD1bmqfgb;ml+Uqrf9bqhu4S~G2A zdec;^)or3o!kb8Q9!ft`<$vR4sQPWIW~2DaBbQRKJ5x2ekmt2}U9pC$cBj+oR2{2X zZ`d7FFFC5#4TCf7<}561B{#8x_BxGf*PdxNkV7;iJm2-wS6qe`vCissTUEDSZ6ho0 zTo|0;;_2Fk)tv5G(>5x&ju+0bn`jN)4zfsofR|XE)VkGK*LS1Vv(cV&yJ#O)x93+I z_N?6quOA84PutzDJ=cYy8I-V#SJ$8}d^A#v9FJT^Z3f1hK6#wgZ&a|fC5{}v>AGF7 zg6r${WN(_BbKL4Q(MSQ<v8@?AIVWl*cEe_^q<Y-#Izlr$S8m*j>ztPbYgxPF{Ra)R zW4BvqnQ>Xp2u9<U3}*sw4LNtx^6e`99#ouex9wlCd-w6<$0yqJU8mKYXmzG{*X`Ne zNa^o}0|hsq1}CF~y3Hx{lcb@o>ROY?cfIR`*RKplx^A~YoqD}e?QjF@nCNcRy6aQJ zjXNR|Z?NauEo4gUK%<V;;N=(zHc<=rdy~w5j86ToRg<5rp$3?i@Z6+?-Bt@h$+f#v ztb|T?rh(F(E7zIg;9vta93Q>jfm<8Y)`Jz*$f03y_3p#yi2iQRuUWmh-G^NCquqyU z?tzxyWf*?VMXAu-F4>K2`nzXZ^&UbF{j`ynj*mva!Jlt-t+}e>PCE_!ACHzbT8Lx4 z$zVm(nz7xw&w}PT9wHLOmWlZF1HH+HTZ`JGb2zx5;O`T4yNeLxhtAEx<~Uc0nHyYW z!?`6`9+^ddO#bmwCFMbT8fg)C(F681XI*p}>I=@T!HZPv*GG8`o!f#JD^{-QSW{i` z_1iO9x{3ORb2QkZy!zUX)pkPXj^I4BgBjQN0ngoWh(8LQYBopLpj)8Rht8eBSzX6Q z6i*y*6Ml338z|5_Rwgg|DU>*q!7DY8*VZYDxK?8ivNGMI9z5aLR^9GYEkqMHbZWtF zgb@0J)j<ePAonKE<|pDJQg^IQ^%{-PsiUb!4JS#yr&9|ZJGfAjg@cSvY|)=n!A?y= zo>#)|HF?9C4lYp84mYh?G!|>pZMfa}19r!4)kDV#b}Q-jf}cC?BqDKVqRrYOx-S9) zijIhY7~r_U#pb0C9WU6Swxh$%4r_Fv%=(@l!c!-7js@qdIdNKU&EC`LSo7Dpb_2O> z1Y1>8`+UELJk12#)W6)^YCxcbPBYV1BS_zI+j|?9i#FK`UR+$F&}j!3DcRd^ANTix z$IuJ?8e{|<7FYFM!HaUzhE4~qTy6#jNEEb=+4XBlFNBUCRFo8Zrofvn>y~ev^bjvY zryE>Woa2eM)j{NCDuLo}i<%-LMK2grtn11F8ANS%HrTFda|am}h0gKdMR6X~9uPWn znL-@uwTZz%lLsKNAoN0KK2T%Pp#xXHfwWzRDre7h$7cK)I(KV($+i3T9)$0xBSP)4 zpmk4hwo*KyJ%`S{!B*wZ2cgnB2od)MFVhs2cds-QgwFlFU=`F>%oom8!A86Z5z&P} zhI*^pQxw{RRTSpC^KD2xsAK2wf^+kNbIXErWWRIkf^*w~bNhmGbiuh}!Kp4dcP=>A zf-||`)E1ojf@3c@Qwz@Yg5xYW?t<ejIL8*8#)31m;4~MU)`HVsaPC@gItz}!;B*(9 z-hwl`;2d9Y<`$g!1?TPs=bi=U-Ua8r1?T>SUT|j2HsF)>e%o=Ia}$uIv65d$?YByi z4r-}mr+R!jnh-)<=)5ghMrrt8oOd{<1uKZS$>)iF$I~;R`k25DodeG4_;qE?aU0OT zP3ZA4=QL-pkoYGM^I0nAy+=bBTy_(r8LS1%-@u48d@y9=3g-d-1Q74*O<K+a&d-BR zX_Rq2l#tbp0#@YcU?q_|1SA^+j8G-8f32+d+WeOliR8yHfjQ@B*b7#4E%<;!#@^l} z3O(XNqtA)uLzV-t4|x!`wL}@T=dU2afZR5xE3GMmZVn$Z?>yyv*m>;w)1AkuCH(^2 z^#Npj1xbGzLBO|gJd7ebtD&bd2HuA}*%<~~qkrv^dqC)1wZ9u$&J(cu%lQ8X;R-nT zD!AYy(ZCK~N5S_~g{GO=pPv`!)4|I#A*(XRTwZaTO0jn$nB`~To!TsnISc&x)2FCT z#?V66v#w(`F|>-}kI=lILG%6!_t_&DOVKE^lD2B+DmeD*)SRDkzUn*{JCv#+u3(`$ z_}i>uu8CmLgQ>L^V6K;|dO`vJ>j?a>%D^*bST0tvT$E*DW2Pl2nfPv$iGL}}gvJod z#wL~xger=*cBetQH_s(hXHmH0>4mi3N=$aJ7XAnudGh!}HRY|vA6Ztt)s&3&#GJ~a zVQX*FTZ42-GZk&GsI_`*&@Ka<V-CPA6riled_uxWvdg`l=17v20<;yNK*-Oog7kyt zNZdki(srKmmgCK`Ch-!tK3<8PIgZG}%R634vcsClvR1P(FI2RHzL|!zx6$aiNs~;~ zInaiX&f8C!h}dbl+hl~3HZAW^^4CX#mA6H_cT_3=5nleADY3561Z!tq`#4Q)>>{y- zNSsDsga+@%<i%iwW<~0uH$qPm5?GFhAQeoWMA1DNhJqgO7m^>CVo4Bang}C{xi&_a zsH=ydW01z`U|s~oQB5q!v=t`Qz*5&+P^p-JIn(b#kjq)Ufiji^vLu7c0Eg+IWi&G9 zri2$!+0Kt8Zv`u9u*6~tD<&JYg1t~YIg~{~vTHFS9GP-y(EU&_!eT5KEy*(BI9&^b z7F?DIL}R7RXD7NbLPivCF&Bo3ODVX3dxRMOl=pVg0s7!T#7adDc#&7MCcUVhlI$n0 zThVMq667IFw?criRNlh?36>}Ia7KGx=T(`zgWHEET4)g4hcY-1quwGdU>j-y?{V^V z3@qpY?<sm7o}?0wIbY)u{#O~W_c0+~P7dvRA4j78ng7`mtPD@f1oK-QbWx1|d<puQ zG@l_OKEn}9>7Bg|f?0uAih#ysTK#h*k12cPVgxc@$-!SFIVflC_<fb+1ca3rUwjNx zy%~^yGzUpdnA6;PR<Q93M@JUlkaZJhH1DAJ$K_{49`bGxpRS6ZqJ`#h*BT^=1Wzt^ zd3D$<C#*k1stjRy$M7^IDQ|{;JyG=JbqUg#oxHm#d3FROag+A|5_wb>@6Gs+o{?<E zNZyYk!9(7I_^-l6Hshi#=qh7MtrFLG@4y?p^+%CR4k)Jut4O*|vnf+Si(F3i8A?GB zRlA3REe4uag}pFdA%#JM&+hS7g$@5FMlnxXY1qx_u2XUSN)J=tyR5p`!`cZZ`-Bn0 zi7*BkeFbk-uc9pTL9L!Gy*)hnVz|}&NvbG?R=xML%K2&h*Lx$(dyh~eBOc{l3<Qn= zdGQ!{r!vi0#Ck15*5erv8Lvi;3<GC)9M7g`h51rWyD9rku}pXl{Yd0M9{YJnGzk0Y zu}au)j)M-!emUq$Z7V$VHjZA(gzHsHDl2L-ps->{wLs$*-9Yx?BrD~Vs2j)%wpT)K zyE7Ivu}u3<m?NYnRNfVEM$?&D1?i*aNTQJ<EIzG1uV8()4=lk*5f-gjxjq~A$sT;V z4=lk*0oJNn8*AV7>ZDq%KQ)IEY!o12;h&b>74QA6IZR@}Tp{gcBe}RSvcZ46j7ZZ1 z@jBi7cqR4Jc!j$I$)o(DNRq0Gx*3nSvZ^}m%&3RSs_M-6X@RO*jwB~WRlNruT`H=I z%2J@JS|zHg#Z=WzO5lvf_k*>HtSXDxRwlZ|jr>d1$*a*;`cNl<J2VBbH?tI*aJ+#K zx>$X?NC`Czm5_He^))U;_<Df1pPq-O!WZIXz>O>y-XS5A2nyOY0Pipo4I+p1SS50( z#z6;^LwfWLYMm=|a2JO!)k9fRh}6<FfhG%zAbNo6AreHRY!lHG+fX2r?pu>Ql?x-$ zh)RV5)+*n<+y0^bEi6>ZQ13Q}5^NM8rSl3h(9fC!r6$aY_x#kE;L)V81ydDKRppTC zN8?(ON%iCL(*jcc6ffnVQx*3USTg^b%&mW)PE}A@3P`n4LaGf$s+Xu8d90+$vy2%< zWGNPUuLj}siH>iP(?cnuqq2W&PlfeT$Tq86!G4t1ahji~bX!ntt&Ux>niY#S2hj{i zjS-YTF^au=e&reuTSi-zOD0}@kzb*`de}+gSJItCqu8Wcu_|xqHM(xQVMj$|dyFdB z{#bFlKK-0w@ZuE63nojLNclFL770nCiIl(N$%itL@^3KThg9JKz+@ujrNS1TBI$6i zp>*Kj;v~wtWlT2IhbN)ZeRX`nL{tnLSq8k#^dk{hd5U2x5)Gml^jIZ|;Q|gipkmOY zuNG=qVarQ6a;aF5tf)Fc1FYzTE6MwjPS7qVT%F{kTq5KwCkO~B;mVwSz#JqsVb0m5 z%L$R2crTF$zIN;(nWLT5Z+XiJ$9Sm*<>((KuqDFLRF(pczPE&<?`0f)uF!SLmldK& zCk2`@nU6zqa2TB2SO~^{-=0Q;tw8uh>4%~%_uzQDA`}oDkIl=;Ht`C!z|(I{n`U=t z+s7`p<#J+_Rx)TK!FZ*OeOJfv+0A%`eUUQ`S%K{WRr(_|M7@H2S;=pJa+?nJMq{e1 zf=`uZD)cRYC;?u$d4wi-nD;RwP4Fm7o^BQJ;)<U?86=pqxjdmhgL#E3blcO%c2?94 z&O+m<V2_y7s$<WgYakY4e|W!0{XsL;@Uf_$ya3!a=A^6hpJ2K2J|$!teQS%(Sqjg7 z8m~mMqLgR#=2XJfWyNS~7wwXfXJaE%Ii&Oql@+utlhPl?PYVW)Ur$Qx4M<9X7@~5T z_7b72XW_E~%5qi8@)%zWi|dZdSZjySFSQ;U%MK-@9w)VJnYzvxA?lKPEUN#N2e9QD zgF1Y>Mgz%8)E64_yQ~_%*z{ejbR+IhwJMg6VPR(Fdr_|=9FHI~eGJjo@Z^ghqAiaC z9N$AME_R;{`-NjP+IP8l=z?YTu`=Y8gJ`Sy5SOwupQ-i1H#?P=i^ih28_)|C)w=|) z(Q(TU(eqQ`32{t%70ZNowU9^jCjBh-HApnbm{gBdGA2F9K?fX@=AbJzuJGlZ9KDn; z*Q=IPs?=ma8Jjk#77E6ucO|)5^w?BDNC%ek*z^H&kkrHp9GgaN%8>zK>>*hOJe>M1 zZ*2O0UaA3QfHy;6ON8jDECob=yGr!RR=3+3%U6_!Up_vKBA*m=WRCwF`B;veh)S<u zKy0^L6J(xz$4sNW1`boeqsrtw%^A1wHDyg6)b;-^*!>H<(HIT3exD~F3dMedD$9H) zTX4tF#(44P+<g%1`RtV<I=#b`PXChHhGwYt96b+DTB$`6{SJfn{-2PuToQdAi3TB2 zJyr>cjx0|=2P9EF`bg9uWFFbfF-xg4eqSX_4VXfhF9AjoVP2TzVbO#sAf#+37xYqd zkkrHpB+ST7IfVJz*h4a5zCQI^9$~(LmugVLtPt1|AxtVu0b$-zLYQ|j!raEXOF2zO z5lsp!GEL5sXG2enh=@BM-cyO9EjD{w*c}IMWS?;panhj}eud7esnlJZN<fpKSYgGw z>-Z=RO2HZ`zJH?a<Mzb#1m4DBH}u&Yc9r{GOs?XyvQ~7A2&P=S4xV&t6Qld4D(#Lt zi?e>lEA$;6o2TvKC=j10nf)U=9w!=$S8AYW-?n$#IE4c%vEtn8_g~&26XtnWF_H;y z=E;X56W&Elv=5nZbZ9amI-sTxmGEMEqevv&Vk#0Irk<e@36InBFgQtN7B#|?4B7id zA!E53;g^tT5RIV6D$xj^<e&p;1U>pP)*58y`~rt8l?c)6szT5}DGK2$<nMwZ_1BUt zELtH52r0eG<@~leNNVB)Dul>QISS$5Vh_m*;XhKp<tc>IR>ZAz(3y4b%LKMW6atl{ zKq1^xq7ZIj3SldCmU4j*MKdX;$O2&}st5u>jD`q0vwIX(z<1E&s1b2*J$^|y)Z>>p z9sUL0AH^v+Sd^`^F}Jujg7G+ZSYdIN*q<qp=!JA@?UdyJWIfJXtr1zjk|!SuS?_`Q zKFFGPVUtZ&JCb9ciWs$H$fz7y+);IyHLt)Lnu175pxsV&grR%4(vL)B<V{`Qjzohn zsvfI^Q9TYiAfxKhS90&jY%|AUOIbBFp)#umQeoD&k>4X`rH{zuJUo=-p`2EAU!V!L zm(eMwiuH%htw*n;bkb2Rg8h|r?jJk%LoUG+<`}7o0-TY_Mz1re6y&4kAo2SJ2y3S> z)N38@wWG6d<>GwS97(ZLfQUn91w@?qiqpMh*r&~5b;is!&}-=XFls8}m83$)E6n9Y zM?x-@U!zQ;jM9f;QS0Y1Pu?H*mnai8d|5C(8$SiV<_V_1;m#OzO65TUTOxvq%2FVh zIwgXs!vxcHNi1Yvge|rmWOpM(3@35SSh|w!ZC;6b2!p$ZPJr1HC=<pr*hO_Ioh&09 zU#ZzZmAEh6J$09XFo?_VokecYjJ7X4<?a!8O<lxt<LwkOi_XdpcoUqX1hAJQbtD{0 z$uwgLQAPTQNtb~|?v;v6<pij!sf3vTb#45#AV9q?DeRyly5Ov&L1i265(!(kz*hxf z>n=5Hc`Rm&d!+7Sk?ZU{Pigi>Mg2)?!SZ;oLv<WV{Sno@?mCRe2nLh3)6#(->R&KE z>hU&UG(NhQCtv*dsAxyi+sVylvzbXW?wr(U9G|1xM>u|^5RTc~M)7#Ik9hnZY6hBk z{3tySgH!1sF(5z2vg7?XA-8C)8&vlw5&20ZH;l+xQ))=oWnqyaIWm<Kl0QRb%!K6s z5kD;m$)8I~J8($et_w7A>s=x-`58E?ASTb2$K+WSlh4U@l_n@hol0uOa!~$zs^!oV zJ0&W7Jq2ZU_FpC{Xa0n+{2XrwMq&ARo_siAd1O^dSRUF&)6HebsXS*JO^3JC6J0RS zN8o=ky-_q7H)#;#*_P6C;RIcPAEW2PT;7t(EG}=ooFRL=gp8q)>-UlFMxsF`<Mdc1 zlW{-9K?j_S)1xnAo{=X%uIG@YV~6N<m7O$D$|T&I$luW<oc3$R+mkGm&%@<>%_tzG zYg2MLJ#&!Mg!$A?>DP>rn{t@<f!IUxY|UF!zva!=JjhEm=xogq0$U;!OJymbSR8eZ zbL;aDN1Tk7x2Us}FK<QBOo}Novwnyi8+u|iM9}$Z7G|;8B|a0eGL~$0**P(KtyOc_ zxrlTWBG$8TbO4sHSYq78ME^)nB1>1i*c~v^V%Ws!p7_HOcG*g$LpK0nzYRVwBs;Y4 z1s^L$`*6VYHtt@y-kuk?y1byX3B~ad-u{gg$0vF6#Vd}2?@PWw?api*$Y_6hXoEoY zGM7FCz?l4QkrePvrNGnF2Q*{7Z_x8FIO%>6MZq^&9=tynvY0ChzJ)}Chyp!Ui70rE zgAOPP^yus4`c?+A-{at=@<27D3Iz?kA{5q)qB#@@h4uJ5bN`}+f`E{+yet&XGY3gc zoIs%vxhY2|TpD{w77CZAe#;XIui~W|R4A+_uq7fCs4N9S!7mXCJ`)P(%N?j(GDJ~N zia4@lu*k)sCq_+#q(_-7pz9?pT<{59fNS6I8+}W{4ivy9*61=zBKFA^cF*EYLHv`> z7NA=X*jYkW7Y7&YrO!`j59}n&VD~I-u*F9yd+IpA0Dq=I|5UF7ZNPWP#J3(?ft|PP zTFmICu;^;hcsWLt4KMhtLORrWk1&!B$9VFgNQZf9iG4_i*3hIw-aU+cNQhVHZ4^m~ zTTP|JTd8koq{O@Ec^I5Bzlf6J$5~#y_Xt_dl@#wqqCq5u9;-xBJkCJ}loWdOZTk9G zq{T;gCQ7A6o<UV&XtJY7jNhO-DUcYynPh6w5<@^p^?@ugzGx1TnmB<HBXU!Y#Q1jX zAz5Plb?Ub~iSf6*RD(*4Unj67A~C2e1rp=d5{YpulNcB2J5;&Uh@zqtiDap<Wi^FO zPmHPvRhOhUzS22|xay(n)_M)AQ)%N)Ok9i0cF%T%8++5fy_lCl$1g%gB5iL($1mo| zheF5WFy99q^R8sF<+T#s^;yJ*_ZhMw#}zlcUd5_3s18vfM0b^P7EZ5U*vqiJYw1TK z81iP=UyDS8FrOZ)g!vA0&;glGkG?#<$5oE^H4a+Jbcq3#*)(tpv)x5LkC-jH)wP@C zpq$opTU`a)t7+U3U(B3#dUiG8Tg^cvD=4e9@l`-uN0$-{7wgJ?eYZKFYN!BHx0&~6 z&5`t*d4)3JIA7L(<g)yVIYMH<ToLSwu9)K$H;!*6MZYGyQsbP#InqwksPXY&Bkwf* zEHX~*PSy**6+Z=;<mrXq<|Q6fFSH44iRc9?OMzavuS750$MnMGQ5cGE7BsB(?8efF zN#tlgq@$Vsjf(w(82{$o{hiR6!Cux^=xr1+{@sR*@140OrB;#k*VFT1j(_!K(th-^ ziRH!HB4jmp{JRZ_22lZetP&M)AqO2$1?bVY<@idD_?Plbl&XR}gQ`l<WJgg6S5ci5 zjDPngnJO0wIcxC(LOOVrOMas{NNU2I?Mm0;BRA#n*;MQyna|wRZ+U#y;H4Ur&#ok} zCBkP^mI6MzyM)i~j>f<G4plz>jiRCyiRAI`d&$+I6jc$b9@vAE`t2DUGr<PBGxp3R z#=VZ)rnPrkGe6X8w_6w#<J5@*7#uh8*UHr`t5e64d!=a~#}s@#O;0QM@f5pF%lciH z9rs&F5s+fW!k#P4x_4~6YuCl8^i!S{jLqN2Tei{I{865KC}Z;vQj6+CDtJR12&b(e zZUmeSP38e!o_W1UAk3QzgpX5;=0o%JLZaWK=V5Rvydlnwf1YK-`)whYx!T}=A<-b( zK#x_T4Zg-f2h;|7^o^NXS4Pp_=J=(uKx0c)1e#1Jir_m`69tOkUy}SRS`i2cDV@uT zVA<Ma_HQ+ALDgPRA77&zq$W<FB8c3SqX@PmbJ-E@x$)D25$^fCRD&vlf1*lSB8q^@ zQlJRtOBBI8Qv^FQ-Kbm)L=jL5J+c^h9aU-Qi4hdFyCsF<WG^zb{_mj8>v{DX(dI#( zd?>VeC(QRlo5S0aeiKgJ>We8~Om7sC<55#`bg70l<k+L<!`zcDm09G&Ifm@rEo3a0 z5AQ{yLHJOQRl<jF=b!`fp&or1^Nh>}@8giA6d1j(vYrM?VZA5G-vzAqfg}ryW<3ER zr7XFepD+hWO`Jg1i`<mMdcPNYNFE12o%$_r9Q+I~)u62R1c5CP)}yi%u-?%U);r2r zZ!2|{a-xf(nG{oGqWgDpZ0L#65JBe$S(wELSGW-Y+sm;4Y&R{sn;<?wksZurO~!{T z`XU!D+63tGd%WEk(dEdxL^2MAE;qw`A9Tq(k;%w!;&9WNwcLg^$@b;r9wE0?FXA`H zkl%PN#F^oXP!e$4%+Q9xy3%ld7rE|YmJ@HBek9ZBd8@+{NHhr7>9I<<?ll~AK(5oH zZ_#>6=7iVtER=Ge-ki#Xnye^Xc!cUB;==68@oh<d%85|7axB=E)_mncyXGL06_iz4 zITp}HF#pz3Px?7-juXFMfN&=E!YX6;2hHuXx6QfyoXiR?D<2NILne?(X}vb8avlui z_1gC%kJ-`e&%{p)MzcT13pXgQ-$GzZgx9Go1-$N*@Vdiz{SsYZ$gbX|Ri0g|jiS69 zTZgn(`(-L};RNhy!E*GzX}cS~Crqx_WnVl^_CZ2ktB0HO8vgDXe2CZZC))E@)LS(l zn@=$74waJpeIow*H8#GJbGw{*aEs6%Q$u^~`qSBjQZVBBNE$9AP0tYyItjMnPrZh{ zOR*YK{m?aF@)z6QH_39sVQfh_MoEkZE3kUd!C95z(QwT9ba0kpxH1+2?hJFG^GW|B zr_ia+hn>gvM>BLu7gmb8Bd!TS(I|z-#dmk+m+qZn>Add>o)%@zvh}EeFgTelO4Kqd z7`(TNekAQ6Ps^-EqCvEb9&3Z*R6&Qc?O5A6YN?pXnnHtrKB)#zkG~@6a59%)#9>PX z47Z?a77d`HSuQ8P7mVLumE@vaw&bj13kd1pTQ2H#<{+sFbIvba$Bx{T!}GVr9+JoJ zccgyH8^2q;RD<&TWdxQ4iN)Sxe^xaLl>Y9dy~l(QCh<F1)v>4Qtr>jm6nb4+KltF$ zFb>-mSl|YFq{ggexF?_!dUw;`1RjWA!^t4dk0tMT4<M08g^7rMeUg!wd7@kH?kr*Y zI~miT6?dBQL3|Y7qyQri;@?i*4W;-9_4Y;fl~}aOT-n=c`97S3>uDJ`()Z+St$7NI z%~s_=Z?fUmtghQ?j*nWEBy6`PJzTn=UBZq(IwJ<AWpKg3MgC~5*TDjIw=#>>aF|Ti z%5fE-g~JZ5>KuK8=GqNfB**QCNuC@WBi-uEQ{K8xk3M*3AGYC}G<<+2odmY@%7$r= zck=FLH0=@c<U^VEc#K+kp|+E>2ai1_(;k(5zTXqimQnf<RKbj)D&V-HBKSD#5W$^8 z)R?RUTw#iO;8P6T`!xM1(*vJDqCxb49xF@YGF$yFM;%lT=<!D)=g6Rc#6e5dK>WU{ z1vFra7I>C?o;QE-H%SJ{g@A7ULa@EcZB}PnjoyrU((`xCAp{%h%z}WlyxF4-N6O^F z@(sy^XXzSwVxRzHlno}UnuDvinB#~>im-aPucx8I+R+D=V5A7E-g2waAW`w(EBe3^ zj1*ukqx*#vlpi)niC#C?gICfV5O0Lzm8g~AE(DtCV%{CEq)x(~e(njnd>%PPQKWgI zsB7_9D$f%gLP4_gL^sDz3+9R5#62*me*7!y*h@t}Qelep<4lQuoMHO$Iu>Nv)X)Ge zAv=8(ai>gQLz+Gc&_0GGF?PH@nlvh$dbn*6k@0iX0fsy65SKwKGahH~-V^krOlJH7 z5)C3V^jKvw<G*v%L1l&>e?{URS!jHY!<GsSZUOO7I{R7!s7Q@3k>B&A##fRoEKX_& zwwE=njLP_yx%KFEmAC}^qbW5g^!1!MifE(&Ynki&O$Ft9<|xtY<|KJGktDfK=0BDR zmH(pp&f&k!8>6b0=TEl9PYd{OJCd+&H|S}&-WTDfCBuJIm?HkWt%Uz>WBhkP-1`{= z>Z>_RZc)sZgXWOP?FLl-u*mIY!gNa^!5z*gxOd6x7`*M9jNf-1ZbqN{V_K%Zr`L5b zi8NMgSU$T#(~FmD;z=<K=8xrPLz?2}nGgr_Gt|-g+qID7z;wYVTO2LrwpmWR4*e*j z+%6IgLb-aZGRl1`M;(-M_4u1Ko|4)3-8=`S?5i`T60s&53K9P-)kYo>|9q00#SyV! zdvwa}_}!|8j-N8e5RIrrDPXNaPtrnt#vDqpVNRLbi89lIj#tu*sEip^4DYb=i1C@Y zPGrXX!}w_dV}6|%aL^Is&k)#B88K2}iWu`)31c2(jH!v*j6Ag!p5@Lc4$IMRNZh%4 z)9|?SB{#E~yF$Kd4#HRGBlF;^ey$npm#?BCXgO*JL-#JEA7vc%G9(&=qx4v19CaB- z9h9T=_{(GO$h>qlM=j;0#DL008aRcE4v^RLxad%lgT--?V0#o3K5>&#hEtX~hG<0P zA^|IzK$gAPGRH{_6kv#x$1=`+<~X8}BCK>?RPo(A`oI#56k+8Ku79czEWwC5lV1_f z5Xa4=pDE(Z<Z#sPbEy79C`op5_#^St0;>NQcfp`k|3(5^DpXH}DWdvj3Dq|l)n6UO zz+`rK5v?H0{}Hdr%rYeYf0mq3wD#<M1AD=eT}gfKCrmDe&Kn*ke^2%k?qvs04Z5FD zv6{D^@HuMD33D6mCsYh;_7f^8!hCrnt?Bo*r7po(yi*PK6Yh;_LJ)5WY&zL6mtQ(* zvcVhOoO)WEaM(uA`<vKLa<SOLi~9$*GkEVDA$JI)`nze)L!v<xoE~dKQk<j%C`|cs zj#{qZGNz>cgnIlHd*co#i-A{j*is3{Er6Y+iG2;AqTyakevdSq_Kup@C%Gt>aXI@5 z1%z}npj^}=<{+sFb9GR<pD=P$4&~3p9+F4*?bL61`w4wsszE9LIs!X!l%F)xxci>u z{e)DQnDUd1#2qi%PdHaX`E!i&&x$)u`F_GEzDWT_-cR@lc{h~eBO=g!d+<3Roxq3< zf$XgLUem`_)o#tDQ{$U0y3Cs0M$?T?k+;Op2ggUT573ehkWKd-(up@XpT1+aaTGni zGNgm-txm(mvGXycu%-D_X9PR-9_0<$Xs6zjJo!*|>V1sbPk(BupHBeeHpwm(D&aSl zCLxWu=B&;<pQz~XLyWWI4>80HBprjAyyjz!&rr+lM?9UYF)j$GqAcXg3`s=sAZoI( zvNLsBR^y1?#iB|(KLe7^;TaG$&bP=>{Vl49o*J+nh;rxKEGOQxV$J2ro&SSGgUB5{ z))uj3N$XW4&+{C)RPyM}NwP<ukI}U974(rUNx4gvk7z^{KN?s?{A>nLk@(q`WMt9e zM?grGi!6RFGzUpdoIvptxruihd1>R-v4>>w^P1FedE)0vUaCRG&n5yJRQ#OFKc)~{ z|EUo`RG>%zZ5A_=#ClfNc8LgTGZA!7+J(w>P!t2D$TKDjA%{GD%AzDR*X>+$fku<> zAt1i+(FA>UK_5s!kNNb0g;hCJa}TuqZX%iJ4Z1;{9bAaZ1>IS@S!t)DOO#Z@#erfv z##_IUV)9w?bccc$*Tj$Xv7=vXN{i#G30!yJ+tr5KJmy#3X17)CbsD~)X3A$QuGE^K zE7Zm8C8U$K-uNmd(0tE;=41DG_fmU}<&Vhr3sF0ML3vNSTKyd?f8INV?4$8-)%s4M z#{Y_UB1uq6jXCyImegftk(aDTrgE6%Nh&QS8e}H<K>QTt&tsBbNs2t^wz5D76?tua zDe=sw;kYuM>8U*9F}f8#40L*oYIdZZRqs2^<?B&Dl-jvWIA5jO52b#LhH%+U)-jvD ziL-HI>k)Uh((KTP`I<NGV^_L$@pU{lUeR}Y7&}uc7N)qUTIBnP+JD4bno-pLbDn(h z<J{%=NYKHz`H8^s-j7c%AM$>hKD_(~s=uOvZk90SPcC7^x8o5{^hFbw3orIV4qhMR z@I19G4LO{-mD*hJ0`Qbb3Cmfoyp{AL8PGoxtQP#F5Wy%?8WMqIMGgNt;6;Z2$W%`F ze+iW=6aFuZpB9Awi;{v49R9ZnAxv~^()WVJeyROJ8eIGU+*KCzz4D;%Nt3M5))Ruq zG@(A~RZ{zvL;a0Z)1fE!N>uv9K|2cPaTrfNoj#P+_6MNt(>~Dmn+WeW@s?y1-f!c{ zhZEjis;U0M`~9aZyjQ1sjs9Z%6+(kyZ}$`E>wN_J4z(;zpueA<hrtWQXJWK}3(K1K zBSOy688)aMOPf18*W^JYHw^h%Q)=ATWnqzVKQfgQ_aC7$X5#*%@za91|5#Gmf#bd~ zOCm<GxJfT1#s3lbtStD~%Y%QN1^@H(bQ$+$+BWqLsMKUviWhY^sZGla@OxC}p(l3N zlg$86^EPF~0AJ<Fhr<AWN!3-v062}sTRij#`$R=MwD_ko<m`^4P9NOE)<u0f3nlju zGa*Sb9dzx!y$7Y+*@Q7gKPQ@Pj~CLi5P6%B{vGZ}C?s09Dmm2boUCnO8Lc1#`MkFH zRkYn1#|evR*^FY6?VkK>l&_^#wlQ8kmF+=XP`iL-$9pOLNJmck{X-Wa(I5+IdaTV^ z9}APsjJhx9z@_VHT5HmBnm!jBGp#_84|{nYN~aDrwp9I~$%L}Fb|ckDw6iFCy6R0y zX3AIAbf=RDwntO%D+Qi3#}JL6q|(`{0@gY@HKfV_Y1fB>*EYvf4HaN+j_#)Pt2nx< zYO#+GeFgY_b6~Bt0`!d?`>vktqp;PQV>PF7tRtUjV=X%{$JW>?Kt4|_w_SH}RF-Qs zsx|DvvBi-f%f<W6b5UZqAV=y|s<I<~(L4*Pp#seHvn{%8t6I0MIu>Sx5il$F$IU@A zmduxs-$uLZ({2`BnwoY4x>S`ec9ohaJycqboGw$P*}GZQvcpf(F)mRI${Be4E?kox zc>F>9v|!-zCGOKfSFR5b*r4N!bNI@2S_6ryI>|fts65f|Vv~>;Y2ErBb##GdDlR76 z!-f_=mEkJ3bw4$Fs+w5#Gk{3#$ns)HqI}tlN`?dJd_R2yz}vmaPOD3<O(N(X=<?|% z+t-+W!=8HHkE;_Z@%}+n;#nvRW?#C)A2nnP#>Wk!PCSQY$UBdIl<CCtk!TQ|sK?SO zJDEgwao`i66LWH*X$cCa{}-N%Ql+?AXAN;$+J&ykh@utuQLW@@#T%0BEKVy5wndpI zJN{O44AF?n+yd4a-In53#~g!RmTbTGlg?@Ef0)M>Kvr6{n%&My(OGk-)Pw{m<Ba0W zQrw&l^{a~BA2ml3jTB(5s<md?4Lb|<6XsBYjRGX-u&JI8QHgs>{g!%G&(E2|sfG$L z*RUZ(d^4)jKt5!SD4Qw3Tg&jQrhl9cFHr!0%^Xm%V=f-=RK;VrHC{=YEqI<cta0q` ziYuO^pjb1p9EiOZ|HjLN(o3>13OAe{<qeHrLXoqw@GJ4t0$KPq?yEs%;p+%&3CTh# zPl+tNzeE<^&tzdwLnawvc%qw6R`NyCMN$f5sr2$rI}6np25&hP%4WjBIMBvCfRAl@ zT;`Yvz#kUhq@}p5<eSjAKi!yDGf;!EZ@dw5k!DG5;|tDp;;P&hmOF2oka@&|HKOB` z_<0tR8m`F6W)QL@g`|UC<Z4`GDku8wrm|&L<1US#7DT_xlada+8duS@GNoBBq1bp0 z{8kbhYiext7(s}m<{Ar+JIXw#*_RRZIH^s`t8!JU`%vn!Xa<)a!a;%+3tO)zTeJAk zZL-&`9Cxu(4L@mrFnzVgbA!uar={cS7xOms<|J=pMyqo!PrmpivZC#G$EoU0$?DvL zWymQTvBLn4pFAp}HQ`<}zB{2W0=kU17s*E1Qq{Bp?T{0^cfn~o&UrsQ4}(+gBXKU` zXIP%RM};h-)9Kf&ejbSinTyb48O%jI#eq-2T!cOs+w^ThVcE~{jFe7C<QY`?R+AlN zM&fs=ZlW0p?RW8ikYuWSQX=QOcmW~(u1lVk_!D!G)P(uatn|D1$W1v~;vZuV$s79r zIrUrKhW_VysRkWM{SJXGA+<o|DNzg4s#;Jc*r%CPxJciz%0Ci|qNNm>WW7+?PT^FF zwg_E!v&(nfX5F22>piPML-~{^DwB5ixQ)-TqFn8Ao4c@>h->mj*~jno%2cN{Q#oi) zVTuA9|E*@d5}mT@<4ss%&(dpo@by<0cjr{t_7-8K{gmbc`sD(+hDB=6NWWanlP_Ms z6m0Q%70egP7g<E`PHr-o+#T1|zUHjkW!ET`(fE`hjq_}X-*er-+FUUF9VeM$afKtY z_ZwMuyc_99*-FA8BpQUh^;ib%ZE@fez~1^?Y|Oe#rmq&yLn(1<Y^j{B$%Mk$_fd`H zts=ZR$xJz6>vo(7w#5Yixxnu-#}JL6q|%NP0c%Akii(OPdc+)vTPQ#o>AKy9y0_q$ z%rWBk3lPMkfMuV3(i}!KQh+6#1uR2-!5m7kQGm1-`yOz=k5#XCY+v0O^A&S6#ZCd@ zI+uss>M?s>X%^oyhg1y}U`A^V3^=ob@SHiKY^DGYM|FZ$u;XY_E#LRd(L^H!SZkUc ztp3bEx!~?T#hYu+PWZg^-YMBk0p2FI9K+6;j$zd`nX}DNb;b&?)0IBCTa1|_rX~t- zqRnmS5$zV-s+R8u%+XXsMVN?_`Ad1%^ns}uD!^QYZ(^ogY)4azc+eb9uu+6mvzj$q zgLG#fNU06;5#krs#k-h}#w(05a!yaj<?Lcyq`SKkok&3|UcZZbdHh$_-EnTK&>iD+ zQfHBt4rwzcZ)VvwLtZ^tS>*nMm!-wRNL6szDK8fG;NI+X`CR<8V7mMsUN3_VaqmUQ zTS`M*Do@D}cdBHFJH>{$e{nEUM*Dc%$}AOrzc<$G(quFel7}8c+Ku)hG~qtRkHPfN zC!r7GF5ixLEN%IDBo{{Sl#Nc08;(xBPf*v_ENp&`o`)yj2jZ~w3oH-b{}i&AJE{CT zNHoZ>RF7paEd4qMJ^{m0eJ+;A?L-zif5m}I$D)Y=P=&NetASGnp#Mz1FPJobKFLJ+ z7&K?nSU^Z;eC3jkoMS9oQxoQrpmfqWa#IeYo{h|98TGvQX#t~Fc&P?u)bCIwEul$c zDo+Wc9xq|k<BU;X6m^{PN#ZElNs&gLB;H5$8A{O-RXcHYtLs#{^KH!MVh*>%!nx1& zAD!_+Cwz5WtTx+qabmaMH!&G|18*-zld*?*@}W$|S}@-SnextKG8sE|s5d!-YyRlw z`H~&oRYRWR_~I;Vk5y`LZ0J0nmPb4NI>++i-AzBrreE(xqCt30k7dAfZ|A@#famnN z7!~{^Gr;>ecq!M3MpVAjz$$$AB-KIQgzE>AT$GcYZo*ZtJ?i?^TCdZ=*?-Cu%_qz; zL?h}@TfkZmEQ~36mr?*fZw{ETRDimM0n#^x*-5W2n?uTG3h*}A?5hc!@<*TbVI@u} z=KnUw%$h2|-IA6Q#|!E&_4&W%*m`pX`0LY(tr8I_#r_X-=!~TT)X}<2M|)_#-&=jI zu~rj}6ksi{w=nmj?q%O@j*}QDz@TR4*|l!f!p3>Ug%_D4$z}@h*85lmZq{)M5kpkx zX)ia2%vdTwU5@MJyFC?buQ^y^pa5fi^g%DaYGo(Qt6(>pgJmogp*CDxxY(M?`J}hn z2dZkR09E?*IEp`Nd1uU#wblyIH^q}dKE7L>#%Ih3wMxsq#~fT|tN?oh$DV3f09TP8 zGDpsuD!|>;YTHfr-FT$6@gcEN=7-IZb;gRYIb`0q%TM%ytua=By_uIg?pN7@f7BdY zYpnoXyO{b}bG)3zR6(Pxj-v*3KBYpRHph{y6qIMBHR*RdR!xQaQ*)@)L;=oOR%gzg zt-5u{Ja-D0VN{P-XPeb#M=9dpn&al1EXc?9Y(84rjQp#4Mha{e<YaY}6P*)QoM$W? zBr64IqY)Zy?^Zm%)f`MTQh>D*$DUeP3RTs^1?EVpi2@u^rP0c(Qm{+R;WCzrP#b^( z!=le%KU`N`#lEr+RMnF4Jl&Bm<8Ur^D<U5|VWveM+XxrfVAz3GJ7rKH{ymlJ;!zMx zL}Q(f>s$Pr=}(r3Yef7eD>yu0;tI=o>_ihTfN%%1tW9)>Mqti}Gb(3u;aSYG;}y;W zoIfZPts;nLY6$64zThjILaaq@<4}ly<pe9;U*hnQ{E7AF<QM90<Mfpk>kg7{sln2n z)N)%wyOS0$qft7av5^-rZ$eYcPPg6?KP{MUy_L7oL8n`vz?f<&O}A2cN~T+@CDW}q z#>aW!$e*Eu9^&&1(cP8**;i@(KklI4_kA_HejCl9%5#@PTEBfKdT`;CbM}b8e(vzb zfxW(+oI^9wp1-2rszD|quEuBh;;+fUem5bl>)$}ag3s7K)z683TjCS_BGBZ(8R|uv zOR;{EqFXXCY;vRMHp#4Tj-MVje-2$b!mqCz(FgWs`BL}=X)OrL1X9s)=8KhII_YFU z@56$Z#Z`h|qv!oy2R~rp#WnEXVCddwh0NuyfqxE(23Z@>W37`sDlB5L^SZvoF-w;P zR727cfO_oFw2Bp>`)3@td__Po0<9sffNNlt6@kAe&ljwKKbK^rd{H201zbQ#m#^jZ zkMEg-q$Z4&bx^tj9=Rz;l5Ku*<RSU9scrGo0!g+VNmzRw^b>6F@2HXnT>;<5&n1)k z?@2zAjEWMev9(gii%z|@N`#oj*1gY3TYUN2cNE{G2qUk3UrjX`O7Rhudd{9^<?z89 zD(x0-Eg_PmFQ4f05)fnBSBsNjRr^}r28>p<Z{W#?vZ{S6%oj=woL}s`+j;EzGn~io z3&+?&aMbLMuxfFB8UOs?(Qqu-njF}RMH1ZTmGHasCOcvH^suur=OO9bY3E&Fo2fq5 zq~k@WT<MbhJrOSl(ksNcdJ&HUaanx_&6AUbi8@A#ZlAYuB`?vj9|grr&-%F8Km~YF z!MzrhU$Z6do>S`=@nDbpSysF^3pquXT#>j^CXcrwRU`{asghezc~S?s$m2XBQ#oAn zQ&b|bt;{8l#7_&j<k6&%gK|l*S?C{0JL5-=FZxE6vpBgV?e)}L)%YR!DWaG4Nk({d zqDXeLN-)7{!5^FpDa;`)qFJz2_<Q0n&AA;>?~$6UOf$bjl^jaF5B2TcL?6aRcS_N< z)iqq5h}){!_q8A!@jgT>%TOe#bZs2Eg*m2)(S6-YyVJr4y!5?oeC1-?N8(Er+i5Hm zl<i4H1quE>Z@fk%_!XXf@g!JuPRO^YjhvEmLY^x_Mguv9G--JLT5?^3^N{j4G#>r= z6W>kT=X}+9Y`;w8A3(E?S)AH-VgN&xXN!O~D1Aw2OKg<1{QM*YmyVLMro?fQu9Q*- zl|%m)j$0P`z0WhRNTZ_+m@+ha39RRCmbx&3E*}@^HcJV%Hz#N7MF%vqeSxXMWd6O> z987CXUHTBvS7JvI_9FJwm6of_AyX4YIBlzq6~fHo;Ql^vxQPNBao3I9SZ+5*5{(pK zB|C3q9M2plF;IXZ@41nY=FE{~GX;2=4L366+sq*|mI_d{OYosNR?ZT<(9WgBbGb~9 znd3-S3d*x)%I(m4B3mm{I`fCk;bb!fc-uw1YOmR`r?D!hIY9K+&A|(77UU$|IUqav z_soG)6Gb@f`cxGkbE<LckNd#kCW>&9l|H2w|GEzxZlVBZO_HcOH`7qC{>2<iHdBOm zwR`nV_K_;~ZgkZ3?q!u^;;Q^RYROCi-l}@btv0MlTP@rsb1=b10n#WTMJpSMA1mfi zqLBiu%q9c5(NCBIW-Jw<Mv8$xk*#VrNxY^HRMk=e>IPvjp@V(BIc(Nc0q%NrL0$Io z5p&p#r2^CyH9FBCbD+VLIU2WMJW+k*ig*i%MiJ6iH<3^quOvEXQTsUJ@4%&95+Zvf zpNPi^L@vP=2)>;niJjtB2r-0>SH#FbyG-KlAN@1xpPJnhN`pjU(;+Ntb(swo_*guy zDpaSq(}MJU&OFRLsK)F(%>D7xf_a#?@cJKgn*|L>2A<P@p-j6_VTz_*4y)5H${}cn z*#?W(qWKH6Eo_Iye|Ci=%J<V1Xd{DjkH_xYxy5^OIcn$Gb@<Pp;6KiraQx;S-gidu z&#K3EBi-q(SdZUq?^jU+-ZHv1=3nWCy(y2Kw%~Xd(|fM>iDmfVdF<ZkV_thBertF) zo{1k#Z^tJ5Xn9j-;78m0_GbLJ%e!bLesrB@oZ}w*%5>iQ{2DyD-(yF<-|KB8gZFuR zR}&%(c>h3FZuV#r)tjdOd;`dQY68cGIv-0WM{w2RA5*p-i?99*MqD5365&G9tHgV3 zm@&Tp;8yR)NAc$E-c{s;qu$(F{IEQ>3^?h%d=-AHdF))~x<{9#dXLhoRY<FFGv24j zRd;)vs30Bh$O`=My>HSxw|S3mK)NrW?B1uz0X^>>bgB8Q_ZazM&f888r#(8Qu@`JY zgl$c=THR)g?kMY8_*DM-(}R_6UHApt=9)O!*AMRtgSFxdes~m5`0GeVX|Q~Adaw%d zke%^HX~<i_20G{u*FkivK$*6??B&(iBi!_HN!g6u3HJx<+E&N6tHAPcIxtJI)t{f4 zY&EbUUCv}QEAkT-n=N+hEOYDP@4c#itJkU72)t|si7#5lkDUWzt-uL96C(1Mb6T*@ zpT`JhCV3pbCybi`O`pFStt@F3-j~y`{hHU|8=($u(W^uyt?Y=Gs+1Y59W>br$H)5; z(Z|H^SJ|Y?S9z#svzF3=m^_b0ds-|s$1hPvC|xkpuxFuk(K1yBc;7^u4VEE`HvKt1 zG&)$uK5hz@?c0Cd8`&aTypZNS1DkmT{|A$TCts?>)8GaL|Ht7J{5f>(yn=gwM@7M; zyGgNEz65E}3P96W<<@sxY^&q)ZA}J6Uk%eyU7pZ7{|x&52`T!HwCGpn7CrrBF4@p! zQ1X`!r{r`|>j^3OYtoWmky~<UM}a}1uN+RHX+xW7p>5nEE=O4wdRHYem;JUyNrEkx z2=^d>jUpxRrz@i!nJld14xd`9!{`7(er-YxQCg4+T@2@AOwjA%bM$J$HNDA+{|`R^ BX2t*j literal 94743 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 diff --git a/docs/_build/doctrees/modules/views.doctree b/docs/_build/doctrees/modules/views.doctree index e0a3eca4d13f53f5d925e889ef7f91a0154777ae..f261a7ae45fbaa86aa5294b8eb331d7ddd4ca64d 100644 GIT binary patch literal 95782 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 literal 97884 zcmeHw3A`j#dGEmN7iM4vW*7!W8f2M)J9mJf!hk4Y1{}-`BQv0hA${w1SKq3d?yjb) z`rf%H2(k@OvPk0=<Mxd2C4h)NHJa7LC5d_967%93O`<XJMYH*fiDL5q&Z$#Xr)%%7 z?i<ZZNA8^Ns&l^YJKs6~|M|{#+p<TGT5{A9`agGV-K=#Ty=hOi&AMv$+*R~NOKm&7 zM|#_C@7>bd>aMa?$I;uf_;sECc*8Q=j@qvG+!Z${%`RT`pI=k&wmMb+rG4(P9ko-P zQEau^wVFM*qB%~--nnDP{QUe>XTj0T_LOPO?x?GCJMg5vqvsySvgp`qw{BJsx0=0u z?s{9TId*r((VeDRJ=`#@R_|VSeZw@Jw&|$Izjmmpw-4F9mmcM=sn*PPL!YfS^d>~R zvF9FdFSH%ya8=W1wI=@O^xS1lvpw5$m$MvE!i1(YooZ8^Q=7e)E_b&$mfouR`CDp3 zwbXV^t=b)>rlRcCjxtl7*Xxefd+927Wz{yj7JhKA*m1qBTJ{dZt|{HaI}YfMYVSBu z)AyUU!xXh^dI$fm&Rwtr_Oy4j%z77M?wHfnd3(yTA=^6ju<lfCM{&A#Akx}-#cHD_ z@Pnl)Ey%pOt{`_uX?2h|wu&l5O(~9Uwvk>-cK7AB@y!~Pr?(rhDYGA03R&r$YOSf* zHY|ll9J3ZOrn?-zU@i3A4U`#~lPa<5sI5*DMZ;n6{r0oYzX+Z%!7adQd7rzX)-;tv zRkfw)&8kwbTPiEzh<l8s%vaU6GSgJ+R9VNXhhYx2s>7kIw$daiPSx9;u7js)W}OsP zEz7j3n$oT}RSP~xQrBRoV=c8~T7In^?H*UH>o#TWc>wY{)@qPO!u?Ja?&p{${9ad` z2CEg#X*J<`%j@b)cNVX$*6Y;{tfwFDxl4NPTFON-=BZq$BpHt<kF;S|4Kg;#W!w`i zwPsp%R8t2{2QTW(<lNgGOKICwEu{ZawLOPF$IYsaqaJpkObcG;^p3b|Wy|#3)m^8t z{o?Jm4qrZAZOy24xW@wgNmEq^Zc0sDZZyZ*Ed@5asf%`F(-WQ#m@R7fRQxIY8?~vj zZ{X#Q7V?qRvuazl6vwpi><Zr0@UJ!0MBCj~;9VP;!{}|a2l7e3){nSrno4`NtISe8 z)nS^W)i#>F*>%Fzj@n?#K}lGrrjkX;1WMO2tD)*ST8H;BEox|0x~+4`j`94Fx&?^0 zR<18(e*M9#wqM+HxAYa;=WW_~upxD6AqVZwxa&y@zk5I%v>bS|c9gc%U0u`Ba-lHm zdXBAiE%Y34QoXH`nf#aFPByw&ceVJ2J-<f0P432iKha)j&6rK8Gh&af!V_(!g<7Os z(5}2bNW0KI#`h;Q7$`4<@SfO5J))E;%Wyq<Sacx{FagySWKI8a7CNk;t?rp#4>rYn zECL1QCkIr;s%h7$cDD&PI^sUpK$l1@+IvuM>yD0IquS}tH1!(qr;fO1%h_4#tPcNU zzryBozAcZq=k-6?R_9@**ymCHIeq1ej<=&N*m}*bDz%#0anK7LakoM7mTucrX`ZyO zZK!w@)6&ssEj)aB+`~1ii!K{40VY&Dw450Sra!MwiW>TE*r3sEv#yQx$FQz~u3W); zll?lj%sDkh$>&CeL0_)Vwy8?04fMWD!L$0L=(h#BCOnVw`zuX|MmS78mx<<u$4->R zv{}{T`}Oko)bHZkGtq&OJc@-b&$BP<T${~m*QOqR*R^}_+-dULfF)os8k%NWwx)N; zsW!=v1P+4V&gfIpGj&)6Jav+s1NvC>g(^S}az>4*)~P$um1cF`v<@|z<~*L8lCwx~ zK^uLhs<gWuys;&kbLbm9urZVr76L-ym(%6KIHJy4X17yqQHO7lSx)U!z1so&5`vi~ zIuW>4-|wDj{Jy4%HiztdH#|Ek4xq4lrP*w%=(X!=4gD-=M$}>El%`I!q_35qAZtNw z=`h~zs|=;1S7$Ayqv5BmQ4zo?fa6{xBe#JSKtj<oWIC7*z;*P7&RXy}F<C1hcTLJW z)asG*$$f?cmGL|hKb|5h)j?gD=<uo?ARB&uj{Gx_61-&wxM87;hKVQ6hzc@iHoKrg zs#R6&>h3*PvZpv@^!&mGdmwI7GtEPQd*%?)(zu^=fJ=I<+f=CInv9ml@(LMLYEN5a z`P*P8sN9=XzrFNz-QX36sH-9ilJxKr0zImrzGe$Dqt6KdI4vp`RcE*DV?@_o0U7l= z1G@D-w83F*8>S}g+NxnVV=vgCrsC^hOtPw`=}l13HXg)tt6>#|yO|iaXm4Y`EISCg zh4<V`Ujn$Zh&oizYoU**oWXhecG(}!sOWYDBajNWA$+Jl)w`?5hfXU{4)v<qyR>QT z!tRWsJ*K_YUFj&Z1gJgj9qxqUaF_6)bydCF;joKA%TiJpf0z5;tQ15Y->xD$gi`5| zuE_s!?Je39G-_M!4P=gTml1GdxU*;9RoC{kC!yw3czYRRBOojvz!x9J|2~K>S9t8e ztrZx<2zz+rm(IdY8r49n_H4y$RK(Ao?}nO>C$#p<e4xo{;GLm=zbB;<yyos<Nm?bq z<bNov^O*Jt?Q!iL%tFEv%m7fHjF4?c?YG2x85Vp+0SgLc5-ccw<`xt}rkL$TiN5P) z6@uXm)BROoy04GRbXIZGF@@627t(nuN<FfD@$y8YMtZLdoBlYk=?}+c(@p`KhV)4= zY3K>jtRs{&+oG2wTGY{0L?d|C>BclpMkLF(r?HVzV`||C3z(EElwi%UwxV^b?(twq zIxya;a{OUPu%U0zMj;{^cP?>PVLU7bp@{q_7I;z!9X)tkNkep^ZDH60a%vmGUuf@f zm)}6aC;?>JW5(so&f<FpWyVf?C%VC-VfGC)`c3OxjotKyKpAZ_hSA5_9Zhc^o&qj- zA;{&N8cG5^#>z6T!s~#n$Bk=Anz+K;mB3pXWDp}jNdTcHz;B~OWGY)ZlyB>~CwibR z{od0q+~@QZ0gKF&jlCqgQlQSgEE6hSDsU=9hq^PyeiRkL!I1L%a_esV0?B)Jknz@S zm92Wa!u734#c%6ri>>lLl6D#5mo?cn4fexY`k_jLS_DKbHSUpP*(2md#H=Lec@KD@ z#GgZM{VJ3jbRTm_F()HCFVIhMK1Ni@V+)a-$LS`_G^?53aY|1FbstjLO;-56JPL<% zWy%`&;x#xelV&}WhS)WRl0=^o%nsMZ)^L6Lk4cZ9^I2)B7?9&tk4K~Xd8Z`yTPgLp z@pk${Y*%oyJ}wtz1o_^9heM6(J?_#&>O!c5CkHBlWzwBdA)@3wZ=u|>oCncsrsrgZ zM2T8+nb~eGNXFsj!-NWt9UTV!mww0CW`*8n)IMx>*mTt^Ik&$tr1EDZl|N0X$Bn1y zPn=QRH5AdJaP4*)7V-YkLwO8rj8F3S|46)#fTY^s*o6+b$~zu=htw?w<B?-%{B*d3 zupq)q_p;$0h7mn?jd+iT)2N17#&r`D3y2vnwH*Y1m*Z^&fsHq#aH{nNAM>md68l4( zki1fTeVn8g_2n*uB$#GcMsotbh~be^015ke<==$&{hq@KXXg86PjQ#C;T!r|mKS}| z&}qI0`f@d)uhdofa=WV<-DZ<DbEYH&a5n`Fd~4W~w#B#-?;a@tLE}-$H{>B#^@;`> zE=IFKP<67Rv@0x{P?=LLgiv_ow!#L-82uuI;7m<ii=l4?!~GgU5|b5hnhL_Jh|V}P zK=vdJjg8?jE02cFr`?g4$jQnwl;#r%i~&Vu`}IQu;h<+X*3$C?`bHc7;dw~4d^Cxl zk&AX=xK&dxL7d5V6f^87?n-mU@cb6RVb0US(zz?!Cg(=*7vcX$cQ84(in?9)s<DNn z^2YOlmwGys$SltCBX#M-;+{k<H9aaW<%bZ_>vv$`px57Obo<gbOKJ3z$yDJ|vaAT> z7#EX!5FZ_qDvZSn_xEeL+ONG399)yEU@mG9%9MNk9%P6*_+_c|tx+V7!TVQAvb=&) z!{Yra7VyKoVMt|tpkjiYc;_$qLN4TA=l9pXP?E_$A(_nhV>$VZluQ8kJ0;a_=N3!^ zcjGI_lZ|*n2ze`isa!-izKN3hVchsOzVuQ2<tR5mapODmLbyxgov~!~IQ%yLfnM|i zo~h{lJQV0R=6LkJM=}15vg6Q=)DMxm*Z2|sn}pfM63Uj8A+$c#Z*l=xi^>;>?KPOC zcqQnxG#Q{z+izjL2(b2=1J~}W(4=9-F)NtuaVk8b9gybtAs>{S`3AS=6C|w|VdntI z57YAuATPqdcpj1=ivT3oJRKm7Q&A2Pp%`p5PRDQe8fVZG1c}C(_?Phs{73Sfu)HOL zVTGnS({XS<5eHv6A{=B>ujNAE*U6qf1b&rFTml4++5i#sTgFTiw3F{8tCb7*cz)cs zzKgsfn3oIkmMje$_gRvu8066)OsbPyP~?NJB!3A2bc&?UCQ7A@E@J^`1Al4k0Q4gm zKO2A~TMq|7UqXR?Q;G+mc?p1!$_qfG3<1y@)=7E9Lm-aluBnJ~{((bS3FesX3YMo; zXlmP@taNR)UO_xjtOUfrH4F|Nnne#0tgD$5xW%*Jc(Mzx7r~@`^gP3)FOt?Y;c7^> zErLnhHf3YdFOo&VY$hykiI}uKvUnyPpcWDVN*fVCMFi}Xi&pc@_q=&`!x64D<bZ9g z)`&pYx~S0t9J@PN;aoTtlR0<JyO8l<p!P;dq#mV;gPK%zgMgYRe+i)Weo3Dvxjw~4 zRgd$R#tv$apxkUwlWaX4sNIADGeB)Y0yU)af*L79ptd>E9>nNMAe>kCsR;MfL4+&$ z+Mx<9>)l?*>;<+PR61B9ja6exlfD*<5Gz};tR*xBJ~`1*Xyq4uXW%s&kA)XnuxKde zvnMN4Q&ZcfCaAE`Qm{&^YdiD>V!<u!f@m*<3aenFMT?@T6Z^fjWtIH^V1J1b@a=2l zPt)#Cpbi|LzbxE@W_ELoJHJWKGmP($6EKXIT&)PkbMGh{<NukeB#QA|-V!l>GUP^V zMPWL`zb+BtXGaC`{VN{JMfkPL$n^!nAA^+N-wZK(J5FOn0RH&?Dh-k8Ey?QU!uM$2 zyd9m2d?WClFHSopiF6*Nis5^7XuMXkKsZ`^*+7N$=f`8VlC$LE6esyH+dcs$BbLB1 zUM{J5klVBv$9NfkY3v;1T$G#5F(lg$$1zr+K)=n$51d~oaSWvLatu<2IL0=qzOimw zP>jhijALR!P!6v>rBaS}|C~8HtJb$;2z_PHN!pbf=2~qPlc$xsj)AsAOK26WFUH_{ zBJ|)n-kd5n)L`eJFCcASsmv_!d04D{n!unPuVOkE%YhZl#nKEiTL(l-GiZgbrYhLf zVpA~(f-Nu}RSESycaTR-yFVFXb5d}d@Qs|r;y!ww5sQ^n^Nd(X{#Arna33g}SiFg9 zAxbQ`yd@Hg3*+~6rPB*NkzTY$L@(l{EIEwu0kXMIGTui{QbN#s{3eM|jg1NB3jzwi zpR9T=!jV)0Z)G1t?h)D%<paz4=Bz-f&r4E$hEh2=hnEd+)>19zLVxddN%9h~{=1Sc z-{HCx!}@RYm&T6u&!F6Ftd}f39M(U90{x~JkM+8Q^+@H#dQyh4eoK6t*vfoR;JfFz zsrdeRz8O}vfxp<KHmmi81VZrx;Cr1=+SYAaQe{s~T&H50E0A1a+yFb0Dp(psk%f6p zuOTOJgc-Hc=vqVzBB6L>uuswF)QXNx`fLX`+i1lmDeDz50`)M~V^vy;gS>$IOgFr< zd-tvbmFxHKy5iuTeOFg#&v!+gnw_e=M8U2q>@^Ap9X2m#bl|5_OWsAC1Pz(D<zx@1 z)ANiyJWjsE*n{M;Mc4!Pu(H|14yv>$d*Jex$R2jYY*9_84!0*#2V+FkAx6ZKdBZiV ziHP9D)xw>IoPHRyJtCyxggC<m*!=U!O6Ot>vDx!x^$KL2gD&{<*?~}oB-AXWau5bT zBi@#!3d}_r{0t=dOCSw*N&38&>r;$0yoSFtcGA#5x!I&avh{GJVHXO_APu)mqyeeC zq=A$n(r{`_n-DPq!5KX7P2~(b_o|p=02eT6O?AC8(`_E&3$MW<Ozc|XyZwRL+wedW zgaC8!>>z;fPOYb?YNy>{GUFcqUSYbN2>2WHJVU@M$uJB7CG!_SKyI(H5%7~_n<xTu zc}qmVN$wHY;o@z+PlvyU65(%DvFLvJO2)o#ke&T8^Vi5RN*FVb(-;xp!`Vu7l2uTp zq2Sm*B&(YX^`d$6cJw{uI~e30wIW;rKPLH#L!MM`gFv1qe+iIxs-(}!lq$NIY$JbZ z?2z{?jGqm8lC6h>yf33bzq!SalOK{G52?J6N6HZ7o!s9V`ti=I`c%BTxDW4Go($?} z@AI5q@8ayJ3Ua2sNH|srgI9~r+SnFqdM{y);SQb^$En@OrpRdTT6&&g-IvHB4C^Gj z7r{DitFp1~MzTy4>$tonV%=H(0ZQp0_v%ED8`T~dU$BzV?J)B>F|z9l*BNqTHx?^I zU=3&aiQ}(=0n<In3g*JIP^P?*+>Hz)Ko&E@d@PGa(fO8`n+mn^H%S6LN~s)hCg+Co zBYS{xWFZ|{hl4HECeGRkEbyLz3hc{{&ooQ^kqbpn30q+jR6i`EWY7|j^<$Ezzr#&i zY%uwo{H3uYYY*jSBdcWp;gHorff>m9Y6)49%8RU|3?b{;euLyeXRk5zxq%o~dJQWT zW`8CKCo{*IWV66cEHk5+^o)04EJcD}=Ea%qaH#k1sdlH`fpX!%_;<o=IR}#eLeDdB zy@`y%z*RDR5pd-eDjQsnUKtCnT;3AF^>nu3Hyv2-P6XCp98vI;??Oh0TH^NFEo4!D z$ha9PzoiYamTTk|hybd0d`$o)lgWzZ0#h$T-XP9HW)UEb;+h|N48(Y$B*sok<$zE> zBi;(7YRQFVeg=~KCE(U8Bz>;u`V_;h>-bA!$E{0HZZ>X7wjK_*PC|ixYl<Hc-Ywx4 zQh9NUlp);0!PGd>vws-q`D-dZt=@~1JlMXX5COZB>So#v{l-1;cA-j6EV-YaXIQe4 z1Z7wvnWG4naBa%Qk~fp8(SaJ5w?r&CJ2=}j9Z+sg1e8&oe-%hp@=)!6lWl!ed5WB& zgh1qY%n*T=iIACsj{OgkRm_Di;aqu3`F-RV0hyT5n%}nv!u+Wu%x5W83}vEN)^|?R zUk+44=$t0W336dr+&N92jY<HrXC;OHotvx}ko_xvY3xAu8I+q1WRk&$1G4v`K)(UU z1KG_IkRg>9$VeFivQ0rN6KKW`=n_LNujW%B?WF6xnB^p`#tkwI0o=A#4B!%<<WO}s zo?;5;guC<Uc?Ne+kU9+RB%>99JFaQjaCbQ=9)&wDZ;5bsQPOGD>EQQBBKVmj8cik1 zSuzy<Jaae^wY)(%){s%l#V|?)7&j%FFhC|PS^ZovnOp{MZ?njMK+s%}M4O}3u%Njn z=yT)~kM0?$tiJ4cU{i9TTtK?f-$EmcCt0urNPU;2<lDJHi$UsJ`AcJm)Go@+hE&P) z!$Il+6qo_2k4TV;R9;9WWe8HwPimh5z)B7wpw??ssZjgUy|{FMPACj=s3>+tTs=_P zT2pXkMV)V?4IgV5y5_;2qLUuCg`=KNQ~gi7rRL7z_|wARIU)TE^gM&~>&To8(xpl( z0_ohMWkdR3k+GtX&gCr;($DL=fg&BrU!RENjS(SvpLit$_>alT{#f>h<Q652WyffX z2yP$OZ?FKa*Q`!dHWyq+vgS?bSY(?ArRAx^K&<CTVx2;%98fLihVmm5k(W0RKEoP^ zmi@xZX1aRQp^bq!Lz$KX(og8aXo99{Tk6z->vmW7<K7V5mgmjaTpk)%Ob#UBu;s_; zw3BL=-If^D3ELlX>a%koeTFHUvm2>><zhES<Z0XCY7~=ngIiDX^%D5h^->*N$GyH7 zpSqU6G<H6<8Rcg4DXFrD<5NEf_sj7iiq}hg3aPw&ij*Nf_2#~Qvu~z&@jOouH?Nyb zC2l`=0H=N9j1`4%K&p6G2BF_Wf9I|KqJz<K?OGjYryNq%4sBRw*H+dm>|3mg#%wwE zK!usx?c{0GZn@cW+I1_kE)tD7LeDem_OI{?o`>WgMW`FMY1!264P>n-b>s4uNZqzc zccY~fH#d>E)kj3!B;iV?ZBH?O6mggL3KtqO?lLw@L`d5j*;oNL`n_aDb5XXwjCsTP zU1S;|Y*GFcGZpb!Nt~xCm4mAJ8S&OCRaY(+;AbGoUjhjKKS`gz<@yu@;cxMm#ty>& z2jymiuw?7uK=?5f=nszKLD-c*7^%D<Ov(@lZ<N}Bh-3%^^!zpz0bhI&M|12CpX)_; zB>>N`Hy1ESmshYOH|d^Q+^+@j!>OAV_Wkk$kfl{xn<g0Q4WA|V`whsh2-2NK&oiX^ zbuteNQb?6h1nIc#%0{~FWT7b1ad}Hbx{H#6OzEI^C=v8V6=F}4vt;~x3G+;Wf4hZa z4T*n?VU!3IZb~#^fQm0qRzDXiCYQn6+YQKnFo4t~$y7=e2S}+t2LVV={t^K44oRQe zxIV=I@)rKm*a5PRa<c(avh{EP`Lif610WAc0EtvyfFxxIAWu(f9sOA8xj-sbo^>tm z9%6{dPRqc}*fz(;dJEUev-{$4M|da>_9Rv1w43uij#!TitK<yLe~6xEsCNbF%ur9V zY!TGsRwx_wK2Bzcq8^vGMAW-1sj|f#=;`QpYa;s1k7&r3C2z?n_!m?Ue(?S)<Txb+ z?-$cJ5j2!84GYh%2^R>p&hI9hBNr-Wm&M!V-=mzt(D6Sc34cVX;^-*V^C0Nx$zK9G zZayaLfG1I^=nmQw`AcI*#~;G@+2|<QdN_3aA`0}IXZ-N-RtX)E%8QPq458z;tPZFj zB|TS2MM>*QvxOb%?9?gMyR#2>qT&mjKTQ)Z!6doOPk6!%lZ}(2*fEh4bej;}5<yRL z@z}20(7BWLROPCsGK;(b$4#XpjX|$sF6J(V5FC52gaAcGt$XQthTnfqwZiaQs{11N z&FiOZ{C*|bG>YF`-V*V9r=_+~r_}_nOh<1k5xu)3L+><cOUCXw=GS5bYYQhEas<10 zrimc;bJ8n6gxhx|n<5u(XO+ZT<DDoag4+2Opua&9@DWNCgY9T+xo`1XFtmU7KxOr1 z$7h=*r^-bX($~^?7A%1`{H~<rZ*hYb8&!XVzchB<@OqS+%^M`s562riC@_OJSQ2kQ zDlcy!Wr#OCKfSFA)-V}@`q0tTo?oPrh+Wq)DCk>LmunrJVEWQhy6;f+PrK!0%R&0v z!q7Pf>i<N~GoUxgj11_d$|?f%+=gWX{gPv2fu74-BG6xAscm(BFr05D;=D65oKF$9 zWSBpNYQP_&Z$ip%%R}ryUNp-@P<~5l&4)n#++;)K0{M)BcthNVLI%Y6OC|X(rqswV ze$PN<#bUhVQ6*r!XTcIMzAh=LaDx`Z_+R2LjUD4(fO4}jUNZe~7{37p`u#$DY@jJ& zJW_cvo|GYse_m=!&475%Em9%=((4EW20?fU*&m`xpLU1Jjf3&)gjI6_`Wxwa2Iwb} z%^09dHB$u8xy8x`^j{_8L`Uvi-Vy=*41PXP`Urh45xH+15pr{>N`~m)Bb)jV{oCXO zB}CCjZ-NLGukg$h3?`pRRxKCkiX3^XcpAAy&^0==^%pAza(rEq<ExY^2Cj7Hs#G(% zpw5>>lD`CO`=O-I54b+Xu<iT&rLkk%S5R&?wn?@g4%<G80{sRRk8N`jwjq@l+ejJ0 zw&T3+s_!CV&tX$h>&&Zg{v$1qnr)ghxRa6RMAN`6ieR^uxf#U@@z`_LFnG%M8pn_` z@d~p*P8^z|=NS%tg!E%LBw4Wt4sjcljYF4_6{0xA<t-71&Zjf0s~t<NndTw2US+3w zrlZn>iKujFWT+ICv1E*TIrBOZEj}n5YRG8uxD66PtP|s^H`Le~$!h1qulW3V+ftGD zU}!ckN##(gIGRayI0%|~@|S>Sub1?Bkn2+n&0PM{*wM^Jx!GtY*?KrMdl?GMK(hxW zG(##cnvpVuW?SM~g&3fTwZLBWr()aB_ML_7_oJZ;0D^rnS*IfZ4%P9rTSlfF(|%Lf zGAAy6f}Ur%xSuS=a8as{BDl!yS2iwwo@^AwMJ}(l#9iSi7Iqi)9_ekny?0A*tM;}V zd!V*Ej|wpa<4csuQQA`N33}p5Jn__xJ$FOPtaqF0cEiLqPB_DQiWaWfJ;hzF+xV$> zMEd}qjFhc?9G%>L<eyUDwfH$wAZ6#S#7)%}ZiDRI*xPFS0v>ZulFP>h5=^XZi2^3U zafV<7ZAIid2TKyF{6cM+AIS1<>uL8VN#xcF5CoC!4pt3QorRsa<;&Y{hLsNDXI@KF zfp7y6gX8+L3qj=SwbUvFGgyI?-#z6DFh{axEo^M2h){xwkg0+J<fddTa}j}XuDlC5 z2{}gKKi_olHc6PXDOC*rqhsc^o$gFiudzGT<g-;?Fi>Ir`9agj_V5$@8(vKdWxjBq z*;Yf2wR@m~V>68_{giGySPkSg+!!ei3?xNr=6rHoYALz+*B<|%8M(6hZ|r4;oUEkj zC%Iq=46ZF%=@6xguEW##OYscuq$=;_?H!^c;@w`)N2g;fwV@uy=G&U?^zL<6Ac_94 zXMB^Og^*-5`-b))^^9*5kSxa+dc9|yg@UswoK#)IQMjcj(C;JT0}}U36b`8ng<C63 z-~q6JTw}@6$d|Ms4tIUfjS1#9SsB)E1o!j$u2k;#qdg6})}lg(JaAaVu4s#HZT2s| z2rt2-TQKwn1ws}onu2>C@$Lk@TWczM3rF2}d1!iP5>H`EnRk!`o-ya`idxql)6x+@ zQKZH56S!kav2C-aD|E3G@^8_#QxtFsSz~JAAZ1Da-|Co_L$^vJ0>d7=(lTwFP|=_Q z6<SP4s}Q_PE5pjQy13X{>2z?geR${gTgb1c-T&U^;9U8Q!trzR?RV1ijBg)JUd{Nn z)Od>UZSJ#W^X(_8b|akE;PR%>-lFVsXU$UKz*Y2a9HZ%~^Q!R348nOwBH^4H8R1No zw`>mj$5abG2mKVeO`#c-1P;20)``&4E$IdgnCcgkZIO$qW)#HR<Da9D0m<v%N%H*- zrG_Q16LnLMUa#_lfeH%e#fh5aPPvHM2|iH^2__k?1j=>7abcf7o>E0A*BbuP_$k-7 zP&L_<OEUa$l<VUt(C-rBDc2nm<w7bq<sxl}a$T6(L<1HUIECO-UUN$2Q%9}@*#LvV z(YrVoaJNr)t_af|kH>V(PPYlT;QQ_+%&64$nxmU-#agIPY-Ir_Wiy&1ummS_;o2ag zI7(%IFet<qxG%e1Q^VZmMa&1?|2m>^j&K>oVzr%<XIw?kGoJAWRF#ZpNFGy!XYjf# zn`ay(OGkMIm$yWoaf#={IF6x?vl+1AtzqV+88;=;j3T=N#ONkpTq{l7vRQ`7yj?`P zn!?F)&w(YdjKwofgk+qWYR-UT+?s5OTpT049NrXfK^X&5j0Yw0TuP0GV*JWL1w|=_ z<V(X+49{>SP>kP@)cYW}W3hR;_w$#=PciOC!Pyi;GW>89Lq~xb6yqj|Vjz{9VvsgO zF)m1JplJ-lbBa`kanHaEBa9ZM5{$nl_nCJ8%Sgt#!8b%z=j0dPq30RD(5N06zmVLe z2*2PpSvJ4;H!^gTUvPO#<QM0A4lLMa^>C}15xsa-BCTkSI(iY7vTQbS;_>9#f=#SL z%I`gfnKv7|O(G=XgqSK0P3t^2S?^rjAvSy7y3Rn>15$>IB&jZ-)MzNf&kj^jlrl&T zGc0BB3|9hWxKUE?7q}gZQHGcEm&Q*S&PT!7ltD85aFk&!3iKO&d{p995@kRtH)SAg zh%#)AX^v@3!SjVwrtrCgW@SdLc$W}}hy;s7RFnqJ@MaMODef>iA&~@cSqGo$nNig? z!VVPPn3~ux#V*1<uos!Y;)aCC1SWAHl-YKWyAA1BV53cvVnLHb(?0%O4o&WaPX!1^ zHSQ$`oOXX2mE_#xZsB)1`O8D}JmW8G$f+2Ak$krZf8qXBHh*~=)mfCkaCuAQFBjlk zE{CQPtD)J$3<6^$5}4M=2uz%qWiyzMkj;Gt^C5DQGG<-IZ<GjyIWg9JLHy$nlQqx9 zVdC@WP3%+1J3?Zji)Z|;C4p35l%)DIN)_WUw8=%P#$3F@mqe1k1TOI}l0N^)^(n?B zzRO=4KbQCd3eM&dlCg*55+6W;e)Egx5{ASjkjl*^NE_l3TjJV<AQNIT!*k$t0+BD& zz~&!pjn7Xg?XF$3^bQtTFpAN!OtWE!7zCXt+`%FbZxRI5fi4=snq#6CbR_=`N>j%I z4mC8bfz3B9w$h`~wXi0{nn14NT;i=b4N7l#i{fZPWX^j(-1mFSP^2BCm35pz{1ht5 z!G8-BWX_h8K%7I*GXn8`@+3weB!?|RAh>^(O(32}brvNMT;4JXM3~W5>uSfebti*B zbQgg@#EDrpf!NR5i3ox06;3tmgv#g$M3PaW1S0my0II9Wn&%@BvH9~R_Dje+LLl-j zEbd5RwJ24LK}2~<IC2r_f9pU6h4X@jkp;zT%nnU$zwjK)d^_iaVovTr#r0*!SA$4i znu{Nu5wjX(vLcHr)m#bG>3>QJznfQNG3xYA{?hoVQxgSeQzxk&hNDi`pui03)Rm|c zQn{%UX+zZM;<y$osMBO6SQFCc8iG}MtvZ!e9r42(qA=VT$pB_*0;_SURlM+p2d%D( z6}0%bwCsZd@wkbB?qi^}v3^eML0r%PE;Kc<S2=_=CAhDF&eCK{Xcxe-+K8m!mM|MJ z7rsh698CE<xzRM1i1e?bT`bW!`}mBg^PCLkOY}TrFng#%8H17hrU--Kby+rp`8HWP z%3!#>B{G=j*)<(b<y1S`g00u=s^HxjET)ynVs08)7$iy5vYE`%_2lJ($t*$2?@)%B z%vl`6MA*!xL^B46zCPIkxfo4y8NAu8L;ev~6QuxtFd~rbxsqfRN);nD6c&-HG#Bjq zl1TEGfbEw{`drHODTeJA^Owet?WdvOY;2c|Jsh?_EBbjFRK$lxS`xM+l^feh8^ZR} zliG*CcLCy_6Q_cBZI^C$n#w|@qs*!-G=XbHTRN^vGTT_sX;u!@^!@05EBkr(%Xgwo zust(uB1Lq^m6<L=CD?I8yKoj%hwpc>H3UdP)Yu?bn0CifDu>NklvpHqa1%Yxp!Y{U z^h(uQ1bTT5lnuSFAtOeim&;os^!`l0qv2c<%xq-<uagM8MeZ9awk|VX(6V9oEzEfZ z?7mSr*02GD#V|_*bT=lLFaWk+OV&OY<R+EC8{7Xv?t=mDM<uyFOsV34D^=zofa}R$ z0^oi@(&uwrpJIUf41a0-fcqg7oDH~=v4;cP9t!liZ#>{S65t}08*oV*0^HN$+eSa! zdM=O(x4R;6OXJ!W0W9xaD;J(0-YJS5qV0YN4&&)jConuMCtD7fKNcp<IaXZ-5qKMZ zgzUw}s#3KS0ZeYgvH^1=St$ybT;37^^W1KyX)1Jp7tIxA;N)u)ak4S80jeZl+3<J) z^F;xVQ{)z9Owf<f8WB`nBO5FL!xty(nhOm3GUn~)MaXn841Ad+&OS;N$3UsZ2Ejm2 z{t_^-De0qgeTrdVgTFL>4BU%?voTOI_HY<@9t!kZT0926R>DA}a$_KALm0SGY6<<& z=hb{F^wkbtyX)GC&?GhHvRgA)yypdX_ggqwiES3F98{Io)Wr3yGv$Hb;5S5uX>3}V z>eL(bs!|CCtYKt)6V*RPn&T*ygWjW}9&!Tb+v#~W(ma=p%z#s>%Ob$ZYoKi4e1eP^ z1x_w+iNJY5+**eW{Jbj>KSwts8z*MjF#3mNb3eHI338G$V08ROiJ<9;vE~av_5UVo zo(ojt^XE<M&ye?E*!pcrs&7)NIJQdFI0&|S@|S?EOHT~@*Ahw<-O2wfH^TU_^{-KI zHnvK}9u8Z79|ii&FCJU(lCTx2+}KLm5VmfKYZv_x>p4Iw#NNz~72+%KX$4wn<(a>s zzS6KvoJoXH=MC}e(<ZSfP2JAd$J6$IdNgh!o_`|J4DP%OBkvC8VD4fH!@+bCg0RZV z3CPc<=NTY>jB17fvg80o0GZcU*?_!@Y#Rk+F0b)roTQm@?q&Kxn>Dl5qMZzR58C_- zbf;w=v?-S#bI_*zKradYH4<zfOPtKt6KwYiQs^YmY->Dv^{q?T|1sCm{=HnYoDvl# zWSSI-6U~z@AO*9FoI`q{x8SwP7IRd0UAsr7ZBg-YB<bNK;asag=p&qU!to8^N4%p+ zBk~T!-*E0DYb_xk33q`Hvo27CLLLzPQ0|$6*zB2qEtZ8MWNuy5kO7l>N3#C8m|RTe zykmYlG9HY^Jtc|sUP=|GaZ*hVLgPI7OQ3OoBI)x-T%Tegl27uN;%VF|{u!8IS1<1z z%qLKIHkFeMJ{*<19|dMmxx*5bLn=h&)`!gydln{XM09R*q-FGTInN7Hx!em751GO8 zH@1@PI-Cc2#r{3wx@on7eip0hOxkY1s2XEwbcsi}7y1F!@3cE`PMiUKU)U`ti~0|G zp0TL=$RLbGNwzP-qPV5XW>IT4#Ih(ZZwjd?3XYe^o}kykudu~KwQ^wOy@?pPFlLMl z#2y7yZl${L!yRWK<u}q?YuQqua&Zk6LCj4_-Vj<J^MYh+<O0s*GI*1GKJp(7KVKqA zwwqGL@l&eaLGaU)zXbfON%~B4eTw1djr^s>!OvYNJR3hHgAa$FXP`j8X~u^_?v?Np zsY3Wk8WDb;p43kIVbpVmTrjFwuh8cL{0#cEY#4ozsyTqs!Z~pWbcOkH!sr|5c?P4W zlU*2$N>xw<M!BWRhS7JEVWPnZF7IGN@J-$jJebqTF#_ji+JIBm%N=`fjz|$2dM8Vo z1l&fZghlzq1vqM4pKVjvrrJ<+9B3gEi-`Ofd)rCkxt#*MB9wE&&^z>mH}Z}MI}n{% zAI&&~pMOp+>9dJ1P#Y>Vc@md9bFam*PJ~0OiyAQ)b^lGW^0~-EOy<04eG3^!SVO)& zem{_8`aY$K(T3=v`%Q{<Sf9h?8G=n$=c{w=YCC*w;fjr6Kge5ba?X4=p5#xt=*#K; zZoEXHB@>rGY)+R{e-5RJ&hMPUUy3I-oBhB*s3n#c7x)*rNH(vLYGOEE^EnjgcM|cu z#+G;uQXyWmE@Xw+umCAUwC18n(-nMX66@yUJzA{f_Zna-(|K&489Jx=DwQs(z;Okb z2l5UopgS+-%w`t{7O56pPC=(CA*!KzuWi@c+iMzK*hNPg;1nZ&BLLl0VX1~%iyU`= zAG~9k*tAl|G@DbJgS~y?lqPXahJ0>xsK?&R+|~VwlAg1%YalsuoScmAAU)3*-Dk-q z7^9P%uLz^#9#J-<o1w~xGCD4AiGh*l;k2xp+N|QR44nBq=iM@qO<wLxBrnd0$xE!j zBOoxhu;w6U4sI4MmV4$PnZPWXg(4(oL%cBqBI70-As3NJD1bM<`;qy8Wad{Sx!yvl zagdqE1}Zj<%tT4mnxGlV7qWe1pu+pI<Mc`L=3MmY{7m{pw<C%Eg9MlAxCA!!r;_@g z<yBrRO!PE=X;IkJn^AT)o02MKI5stp0yEgueG;2OstB7Rg@{dE9ovUwGpas+5d_QY z6jBM+2ifWxoOM9wJc0P&U;=hO1}%``7i0tsDp+NsimNlKw8N6_2eZ@`R?J{|4$u!o zjPJUnOz4s&TGGlq8hPV_LK{aZIP7dm94pBR433gyBo6#;9#jvPj!8H0iM;Lbe9)4U zXi((-gzCWw)3d_Aa+0o<(3$rMbL2UUbV)v1gmiH)DVua{plXSdE-r70r0e;$rfI9h zxybA2x(&<3y&KuA>qsK&Dsq`bFr2V+hm7JS9s%t-pEV6ZyS9_lloU5wJQGED*Tw{M z2E^+{$!5q!ypl@bE%0*WJ|OejFA27nQsZD=zcf&>Y0Qf{56Qi9@u1vcB+tYp5T6A} z^*L_wV#LShFD(l3`8kxGO?;%97>@Xyivs;VBR-6DL?S*&6(K&P5D}kC;u~=`^AS|X zbCFc4^Zj6(PAt2b*KmY3cHZD}NV}oba24u8rQP**^GsMc1<G>5XJyVR$ObW|sfjDP zj@iO%6g9$?V7MR`XJt|u;?h<SB*i{NU$y)jTIcD4RL7iPcm;-pT|eywP#oO9OP7uj zrQ#(b!sRW~u@Tz>RZ=OV37>=ELH;|=<)lqSU~#l)hTUE!om26v<hs-De^Wbfn)EK= z(K)Hs<Mcd>Z*3!AWmHRQ6-B5P_tLVd)<>yYqg0E_TO!qBONhH|?=aVFhV^J7!zyyY z#y|`U>sWn3M?kE;Ko<8W<UU6(QWCKmyJaGLY7O-zf$;(w_1DQt=b}-48S_T<SIBfg z_Vj&8o`0g$IM~zDP2sxFTWlJ8ipH&0q7IyejvAU#ST|6yenzly<fzZ%yg?HpOzgV* zP-&+PR9YlM9wC$3M=oY~X^se)XQD|F6!5i>9IFJ*xKpyl3n*1|>hU7}(xPz2e?-H` z=8RGu4aXUuL4kgE7|$6Wl{h0(MK~iVM4a&&siVrKij%~ms8vN=MvzFaGfE|q>XqT{ z5q!*<r<+$e84E&XnEmV`q=tRqbVmw{O-z`zTGz7ZbkKU2{UL@Jz?*mu4}{}e4d#CC zn9Ah@r-m|F73L&KEqb1jq^GHJ7)g@cpa@CgwNN%mdKH;5N|Ly|C6c5IeOg|fH?2br z%vWbKrCSo2Qjyau16Rr)i;7A+0=o1D=E5Ql^@wn;5~lwa$2<|vv_8g+0de}(Wc70q zr?}jCYkN0xj<BaF(EG<|1~Pp}lIa7KDn_2@Ku@VAa{;?Ai6nmsApKcMpQpJ##R5B@ z<}WP@NWULtXM?n4@8LlDArzPa(zi$;jZ_hkCWQ#3Pl>h+fz$$ZJts~_-2>fLi>_Pu z5A@tEW}qs3QIJjW-gXph>IT3nxIuLmr)f`k$FLxpBaZ%baQ-$$S2U$vZ>p68{(2y3 zR_R%ChG|zFPq`d1|6SBcPSjm?vOwJj$=VEcrFt!by1W+3M&0!gF$Q(Hyd|RUMGgIM z^-2@B-_5GH5TvHlX*$`sduJl<+9O_h6DRKokas)T-w#xrOAb>~pklEM6v5sTV@(+# z-DSxp$c4V~`E&fb6nRJRH{TNCy^>hhP^uUJM`3;i;=uAUmsbu{h{%VJ-X*8W1@Z_3 zu&WGcoW%r^j8y{I&q-?8+;+vlzQbQy6tLfeva`Wnviopge+~-t+kO0q{7wn%ktzcA zq!5AqS#eEKz`gJW0sCItNrnCW2UV-3w{hJVpH7)G9YS}^aVVARq)Csd@EL6F(30WA zCA#k-514k#FM<Q{+l9?@g88q}^K1xxHd&K_xm0gOz?|E*Y%u>YSu8q)=JJ*Z=4aA^ z>um78EfKtHBL;7hZv<fdIkK-0*3Xbblmyn}GDrlRmoZZXVEm0_6?1_x&yTm0uOqJr z_(oCDA94m#{F5Zb_b62idui}1)lV*5^d*txF98qNYz{ll1f_~bs8{lr76lK#iwelb zL&@I5;o+a4K)-3l<Kb-*9wJo)4@n`y!!@iU^VpEUJ<n}ZaqkZfA~GBrnN}zxF}}s# z7c7ko1^f8z73`V{tb9|gSrZ^RLBVBz@Qoui*p-}<d<kdpGA-Q<-NNi`tD$`iJaSFj zV=$D$5(kvYk2bZ%*`~n|+#7lEdqinxjx7zQFJb=a{#0nik@@-1h<Q*>bbm2D&(QtT z<Qoj#B`++3?%adQM)!SGNl|p?@|KA1J1{7)y1FBlY-R(!nF#dl5d(dns3X99oiz;+ z8gB@<Dj_t!2)2p9KSqL5U593v4<{?0iwQ)s=FMv!*+xh~z7hGol0<h?su(MXa*yO$ z|A36VaiC(8bLOLV$&+%iliaH@JrkF}Ti!3J{v@|}v2pz4{G~<VEq9^pY~CW(#BjW& zh5|Eqiz)FIq>AtsQiyoVg?-I77{X_5>GgagjoiF~4nU%tG{H|eg9v8LafK&F`gGS; zLvLd*FCM9@wvIKHVsgBqv`j<*u0*Kc(s4PLY1tE7O+0AL>o(oViC4VMEVkON3y=XJ z3T?^6tUYZb7Q0>aw(Y1&ecR-OrtZMqUTkLy->y=zv6FbltS`{kUvQ{7y-op$wu1e| z=W#+-b08z;9h%tH!uHZMx@~^oySEOMw#3Y06O84p&h&S7(JX|cL5dDee<zN05M_5D zH5CzTXb9~EBaxvYT^3q1XWRPCFif|@E)NY#n4Ac%APu&Wp|C@0JG`*qYt(e6|9^Fe zjdqJt9h?e&Sv2gNbn=_@Jfo8{)MOc*lsbnZbdtB(vgzbMlXpewB$u~DI{5-Llu*+~ zgGay+gP?3$*-oUDb0epfu_BLvUamcb+PI*X#~|h7N3L_|k~dy2qKzUn^P~hH2+_?g z$%e>9HxrBC&G1xYKOpU#k|aBiQsbbVmkm^G8tshI-!%dJ$n#Ry3{-eucAV%+KAnr` z4!Zr?tK$-QuPUiO!>ha)@2&Ee7KQhoi?XwMuT(L^@!nM^(C@e6<8^I`_aaq<_mV=y zd-o*tBiZ~nVFR}3GHG<!{jD-KV0&AaJkrPx$YJ-`icQyajV(^iX`h4JY}@uc+hmRF zY|Gq-{V;jt^iQ}toJu_){4FOPdlNm+=-5i~Bu2+1pDjYixX+YL$KFG=6QyHZ-V*89 z&g4;7HY0mDk&zWS^fm}?=U)b!EcFOT*~h3Zd{Xv1<UA$K^DVBKBD`#KidlmI*k_W> zk&Bw8mBL%)Gbmv|cJ>WPxUW%a9PI3S0~K40ovo$yl3ox+rf1I%RC<4YoS#YVor|Ac z;4dFaiZ=13o*~htYA%7GZ8|mFLN`#V=!EKe{?eilw6CK6vI&}0Gs6+I-$a3a9~Mv0 z9+n6iQbh<FDMSQqZ*qr{hoi|3FD7KY-XWEweWQ=0dB+2K7fJ2jb7gQeP5?jW*uexW zJ11vy0{0$MgtDgCDrRj#!&p+#HbnOnY~L0~fY!rd&Z&v3u$3q{UT0o25e;O7F8o*p ztWJu8_JwjQ3SDe9fs#BGyx?azFu03(zx&@nXHM0wfWFLobJD$+(({b&eU$u?(LJdJ z6rp?E`^u(!KTlN{rF&f766xM~fw%YF3?2G`A0UcTnqQO1?~D;g+(OcffY3Rt!H6i^ zO~Rc@n8Y2kT_Ozbn6Tjj%63Px!nr7$lr3*cuSJ#va<rZ#&BK%$mZKf#m{r5<T5YA- zzcu<@1C<uZkh3GnS8}nVO+Gv77g4ff2_)#ZB}G5V%~~u<^<n<fqL846P<A#6k}6<0 z64XY486@a65(z@82niyEhy<M#YLfx$>GK9bZoFodN^Z{Fi(OM<)|5`-o72^Knu9zL zzc=b{saB`me6MkM{FbmyPKf;ndY(aSi?n7CE7`XQ#Bv*y4Y5BaD?}ld%UdGEp6{P- zT~+KVsAhH?<$*+;HAjrI{j!b#Y){@o-Y39zBT{~&8*)l(F^m&I+~XrA3}AO_vg)~D zH<~wZW9J~>0kQWINu=jfYFO+|j$#CsxO$*slXK>1EICsyG|s(f$}@2ZuskEFUgZ`q z2Ft(5Us@DcejdushGnTHhJ)o3P@vyK#K$HckYE|9BCt#f5iI{qf5Q#1IVp}MK-zPT zRFHnqJG{=D>G5tt@XN%3xf-s@p`}E@>Yor%U@OSI1xh^3pwyKPZa%2YVet{28t3nn zuBjcTYFf07wyC#OppJhXk5W72@q}=^-~n={Y4^XJgq$|qFX}%h^>~z?XVhao)hweP zk`EQ39=vADrXK%;3?8K(T;9R1s5-&Bq6*O|JJ0>l+(PG<emm8MumGWpsbb|zqB#ba z3uf1r^1#l~K&6Wztag;PRD0r<-d63&8++PQH}<x=CyL9tYI?`C9UiRcxyy+J+dWnL z03Pfp+6VCmCPz!xE@aAUo8cSoQoU~XC_mkJ-!kNH7#}(we-0VDC-A3fY&sTyTE>#~ z_|rCMPFyn$wj}gZ<YzlcrkjlBark2y_A&U%pqobP_>X2AbRmr97;mJvyT;yi_%mnx zHf1?)eD!GjIc(5fvf6^-EXALjji*-P&#R1eB*UwX?h5?5g&))Lm$*gU_zL~!lT`2^ zSBbMX6?eIA!(_c9%ra3goMt|u-D-S=EbtnGMp)WyY`c_pyK(h$q+V-G;VOFV4&zg6 z@#jv1wz_I}8K0mp?>07*4)+)rLqFqvB<rt}yC2~P%sxf;+B`;Px!0g;0JVn=ieqc{ z8SJ?Cmyz*aN+xlQ_pZjD*BQr9wLD-DqG%5q2Vnv2A>(T##{I?$D*yGy4_D#OBgPH% zr)SJjojhvLiCA5C0==NgS8nzY&(V%@*Wq9%vtgPJmZ`FHr|sU2J$Ds9tW&jm`&_y_ z$98n5OFL)KjW)<bB(Dpb&Rt<6&`?u*a42^rtt|CjO4Bt1pF{XG@oC}H#>d2`W03!7 zH{oO9W8>rC)5T{FpLu)^<FkOz&G@_upI75^3qH5v^BR0^!{>H<UW?Bi_}q!lUHIIM z&pr4Y!RKCl?!)JPd|Z59htC7}Jc!Rj_&kiy>+yL6pB_GsYL9l^HDL>pb-FWC{|U=8 B>cs#6 diff --git a/docs/_build/html/_modules/commentaries/models.html b/docs/_build/html/_modules/commentaries/models.html index 3941d4f3c..96dd6588b 100644 --- a/docs/_build/html/_modules/commentaries/models.html +++ b/docs/_build/html/_modules/commentaries/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -194,7 +196,7 @@ <span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s1">'Commentaries'</span> - <span class="k">def</span> <span class="nf">__str__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_title</span> @@ -239,7 +241,7 @@ <span class="k">return</span> <span class="n">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="k">def</span> <span class="nf">header_as_li</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">header_as_li</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># for display in search lists</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span><span class="s1">'scipost_url'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">scipost_url</span><span class="p">(),</span> <span class="s1">'pub_title'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_title</span><span class="p">,</span> <span class="s1">'author_list'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">author_list</span><span class="p">,</span> @@ -270,13 +272,11 @@ <span class="k">return</span> <span class="n">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="k">def</span> <span class="nf">simple_header_as_li</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">simple_header_as_li</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># for display in Lists</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span><span class="s1">'scipost_url'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">scipost_url</span><span class="p">(),</span> <span class="s1">'pub_title'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_title</span><span class="p">,</span> <span class="s1">'author_list'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">author_list</span><span class="p">})</span> <span class="n">header</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<li>'</span> - <span class="c1">#'<div class="flex-container">'</span> - <span class="c1">#'<div class="flex-whitebox0">'</span> <span class="s1">'<p><a href="{{ scipost_url }}" '</span> <span class="s1">'class="pubtitleli">{{ pub_title }}</a></p>'</span> <span class="s1">'<p>by {{ author_list }}'</span><span class="p">)</span> @@ -289,40 +289,28 @@ <span class="n">header</span> <span class="o">+=</span> <span class="s1">', <a href="{{ arxiv_link }}">{{ arxiv_link }}</a>'</span> <span class="n">context</span><span class="p">[</span><span class="s1">'arxiv_link'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_link</span> <span class="n">header</span> <span class="o">+=</span> <span class="s1">'</p>'</span> - <span class="n">header</span> <span class="o">+=</span> <span class="p">(</span><span class="c1">#'</div></div>'</span> - <span class="s1">'</li>'</span><span class="p">)</span> + <span class="n">header</span> <span class="o">+=</span> <span class="s1">'</li>'</span> <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">header</span><span class="p">)</span> <span class="k">return</span> <span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span> -<div class="viewcode-block" id="Commentary.parse_links_into_urls"><a class="viewcode-back" href="../../modules/models.html#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> +<div class="viewcode-block" id="Commentary.parse_links_into_urls"><a class="viewcode-back" href="../../modules/models.html#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="sd">""" Takes the arXiv nr or DOI and turns it into the urls """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI</span><span class="p">:</span> <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> -<span class="c1"># self.arxiv_or_DOI_string = self.arxiv_or_DOI_string.replace('http://dx.doi.org/', '')</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI_link</span> <span class="o">=</span> <span class="s1">'http://dx.doi.org/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span><span class="p">:</span> -<span class="c1"># self.arxiv_or_DOI_string = str(self.arxiv_link)</span> -<span class="c1"># # Format required: either identifier arXiv:1234.56789v10 or old-style arXiv:cond-mat/9712001v1</span> -<span class="c1"># # strip:</span> -<span class="c1"># self.arxiv_or_DOI_string = self.arxiv_or_DOI_string.replace('http://', '')</span> -<span class="c1"># # Old style: from arxiv.org/abs/1234.5678 into arXiv:1234.5678 (new identifier style)</span> -<span class="c1"># self.arxiv_or_DOI_string = self.arxiv_or_DOI_string.replace('arxiv.org/', '')</span> -<span class="c1"># self.arxiv_or_DOI_string = self.arxiv_or_DOI_string.replace('abs/', '')</span> -<span class="c1"># self.arxiv_or_DOI_string = self.arxiv_or_DOI_string.replace('pdf/', '')</span> -<span class="c1"># # make sure arXiv prefix is there:</span> -<span class="c1"># self.arxiv_or_DOI_string = 'arXiv:' + self.arxiv_or_DOI_string</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span> <span class="o">=</span> <span class="s1">'arXiv:'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_link</span> <span class="o">=</span> <span class="s1">'http://arxiv.org/abs/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span> <span class="k">else</span><span class="p">:</span> <span class="c1"># should never come here</span> <span class="k">pass</span> <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span></div> -<div class="viewcode-block" id="Commentary.scipost_url"><a class="viewcode-back" href="../../modules/models.html#commentaries.models.Commentary.scipost_url">[docs]</a> <span class="k">def</span> <span class="nf">scipost_url</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> +<div class="viewcode-block" id="Commentary.scipost_url"><a class="viewcode-back" href="../../modules/models.html#commentaries.models.Commentary.scipost_url">[docs]</a> <span class="k">def</span> <span class="nf">scipost_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">""" Returns the url of the SciPost Commentary Page """</span> <span class="k">return</span> <span class="s1">'/commentary/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span></div> -<div class="viewcode-block" id="Commentary.scipost_url_full"><a class="viewcode-back" href="../../modules/models.html#commentaries.models.Commentary.scipost_url_full">[docs]</a> <span class="k">def</span> <span class="nf">scipost_url_full</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> +<div class="viewcode-block" id="Commentary.scipost_url_full"><a class="viewcode-back" href="../../modules/models.html#commentaries.models.Commentary.scipost_url_full">[docs]</a> <span class="k">def</span> <span class="nf">scipost_url_full</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">""" Returns the url of the SciPost Commentary Page """</span> <span class="k">return</span> <span class="s1">'https://scipost.org/commentary/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span></div></div> </pre></div> diff --git a/docs/_build/html/_modules/commentaries/views.html b/docs/_build/html/_modules/commentaries/views.html index fc65e3fd7..05dcc5a85 100644 --- a/docs/_build/html/_modules/commentaries/views.html +++ b/docs/_build/html/_modules/commentaries/views.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -171,38 +173,37 @@ <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">'POST'</span><span class="p">:</span> <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="p">)</span> <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span> -<span class="c1"># if form.cleaned_data['arxiv_identifier'] is None and form.cleaned_data['pub_DOI'] is None:</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">''</span> <span class="n">existing_commentary</span> <span class="o">=</span> <span class="kc">None</span> - <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">'arxiv_identifier'</span><span class="p">]</span> <span class="o">==</span><span class="s1">''</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'pub_DOI'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">''</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'arxiv_identifier'</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'pub_DOI'</span><span class="p">]:</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'You must provide either a DOI (for a published paper) '</span> <span class="s1">'or an arXiv identifier (for a preprint).'</span><span class="p">)</span> - <span class="k">elif</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">'arxiv_identifier'</span><span class="p">]</span> <span class="o">!=</span><span class="s1">''</span> <span class="ow">and</span> + <span class="k">elif</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">'arxiv_identifier'</span><span class="p">]</span> <span class="ow">and</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">filter</span><span class="p">(</span><span class="n">arxiv_identifier</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">'arxiv_identifier'</span><span class="p">])</span><span class="o">.</span><span class="n">exists</span><span class="p">())):</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'There already exists a Commentary Page on this preprint, see'</span> <span class="n">existing_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">arxiv_identifier</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">'arxiv_identifier'</span><span class="p">])</span> - <span class="k">elif</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">'pub_DOI'</span><span class="p">]</span> <span class="o">!=</span><span class="s1">''</span> <span class="ow">and</span> + <span class="k">elif</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">'pub_DOI'</span><span class="p">]</span> <span class="ow">and</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">pub_DOI</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">'pub_DOI'</span><span class="p">])</span><span class="o">.</span><span class="n">exists</span><span class="p">()):</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'There already exists a Commentary Page on this publication, see'</span> <span class="n">existing_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">pub_DOI</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">'pub_DOI'</span><span class="p">])</span> - <span class="k">if</span> <span class="n">errormessage</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span> + <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span> <span class="n">doiform</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">()</span> <span class="n">identifierform</span> <span class="o">=</span> <span class="n">IdentifierToQueryForm</span><span class="p">()</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">,</span> <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> <span class="s1">'existing_commentary'</span><span class="p">:</span> <span class="n">existing_commentary</span><span class="p">}</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> - <span class="c1"># otherwise we can create the Commentary</span> + + <span class="c1"># Otherwise we can create the Commentary</span> <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> <span class="n">commentary</span> <span class="o">=</span> <span class="n">Commentary</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="nb">type</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">'type'</span><span class="p">],</span> <span class="n">discipline</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">'discipline'</span><span class="p">],</span> <span class="n">domain</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">'domain'</span><span class="p">],</span> -<span class="c1"># specialization = form.cleaned_data['specialization'],</span> <span class="n">subject_area</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">'subject_area'</span><span class="p">],</span> <span class="n">pub_title</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">'pub_title'</span><span class="p">],</span> <span class="n">arxiv_identifier</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">'arxiv_identifier'</span><span class="p">],</span> @@ -218,7 +219,7 @@ <span class="p">)</span> <span class="n">commentary</span><span class="o">.</span><span class="n">parse_links_into_urls</span><span class="p">()</span> <span class="n">commentary</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> -<span class="c1"># return HttpResponseRedirect('request_commentary_ack')</span> + <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ack_header'</span><span class="p">:</span> <span class="s1">'Thank you for your request for a Commentary Page'</span><span class="p">,</span> <span class="s1">'ack_message'</span><span class="p">:</span> <span class="s1">'Your request will soon be handled by an Editor. '</span><span class="p">,</span> <span class="s1">'followup_message'</span><span class="p">:</span> <span class="s1">'Return to your '</span><span class="p">,</span> @@ -247,13 +248,14 @@ <span class="k">elif</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">pub_DOI</span><span class="o">=</span><span class="n">doiform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'doi'</span><span class="p">])</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'There already exists a Commentary Page on this publication, see'</span> <span class="n">existing_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">pub_DOI</span><span class="o">=</span><span class="n">doiform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'doi'</span><span class="p">])</span> - <span class="k">if</span> <span class="n">errormessage</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span> + <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span> <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">()</span> <span class="n">identifierform</span> <span class="o">=</span> <span class="n">IdentifierToQueryForm</span><span class="p">()</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">,</span> <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> <span class="s1">'existing_commentary'</span><span class="p">:</span> <span class="n">existing_commentary</span><span class="p">}</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> + <span class="c1"># Otherwise we query Crossref for the information:</span> <span class="k">try</span><span class="p">:</span> <span class="n">queryurl</span> <span class="o">=</span> <span class="s1">'http://api.crossref.org/works/</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">doiform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'doi'</span><span class="p">]</span> @@ -266,28 +268,31 @@ <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'author'</span><span class="p">][</span><span class="mi">1</span><span class="p">:]:</span> <span class="n">authorlist</span> <span class="o">+=</span> <span class="s1">', '</span> <span class="o">+</span> <span class="n">author</span><span class="p">[</span><span class="s1">'given'</span><span class="p">]</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> <span class="n">author</span><span class="p">[</span><span class="s1">'family'</span><span class="p">]</span> <span class="n">journal</span> <span class="o">=</span> <span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'container-title'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="k">try</span><span class="p">:</span> <span class="n">volume</span> <span class="o">=</span> <span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'volume'</span><span class="p">]</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="n">volume</span> <span class="o">=</span> <span class="s1">''</span> + <span class="n">pages</span> <span class="o">=</span> <span class="s1">''</span> <span class="k">try</span><span class="p">:</span> <span class="n">pages</span> <span class="o">=</span> <span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'article-number'</span><span class="p">]</span> <span class="c1"># for Phys Rev</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">pass</span> <span class="k">try</span><span class="p">:</span> <span class="n">pages</span> <span class="o">=</span> <span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'page'</span><span class="p">]</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">pass</span> + <span class="n">pub_date</span> <span class="o">=</span> <span class="s1">''</span> <span class="k">try</span><span class="p">:</span> <span class="n">pub_date</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'issued'</span><span class="p">][</span><span class="s1">'date-parts'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'-'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'issued'</span><span class="p">][</span><span class="s1">'date-parts'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]))</span> <span class="k">try</span><span class="p">:</span> <span class="n">pub_date</span> <span class="o">+=</span> <span class="s1">'-'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">doiqueryJSON</span><span class="p">[</span><span class="s1">'message'</span><span class="p">][</span><span class="s1">'issued'</span><span class="p">][</span><span class="s1">'date-parts'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">])</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span> <span class="k">pass</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span> <span class="k">pass</span> <span class="n">pub_DOI</span> <span class="o">=</span> <span class="n">doiform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'doi'</span><span class="p">]</span> <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">(</span> @@ -300,7 +305,7 @@ <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">,}</span> <span class="n">context</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]</span> <span class="o">=</span> <span class="n">pub_title</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span> <span class="k">pass</span> <span class="k">else</span><span class="p">:</span> <span class="k">pass</span> @@ -327,7 +332,7 @@ <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'There already exists a Commentary Page on this preprint, see'</span> <span class="n">existing_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">arxiv_identifier</span><span class="o">=</span><span class="n">identifierform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'identifier'</span><span class="p">])</span> - <span class="k">if</span> <span class="n">errormessage</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span> + <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span> <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">()</span> <span class="n">doiform</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">()</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">,</span> @@ -339,26 +344,29 @@ <span class="n">queryurl</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'http://export.arxiv.org/api/query?id_list=</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">identifierform</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'identifier'</span><span class="p">])</span> <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> + <span class="c1"># If paper has been published, should comment on published version</span> <span class="k">try</span><span class="p">:</span> <span class="n">arxiv_journal_ref</span> <span class="o">=</span> <span class="n">arxivquery</span><span class="p">[</span><span class="s1">'entries'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">'arxiv_journal_ref'</span><span class="p">]</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'This paper has been published as '</span> <span class="o">+</span> <span class="n">arxiv_journal_ref</span> <span class="o">+</span> <span class="s1">'. Please comment on the published version.'</span><span class="p">)</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span> <span class="k">pass</span> <span class="k">try</span><span class="p">:</span> <span class="n">arxiv_doi</span> <span class="o">=</span> <span class="n">arxivquery</span><span class="p">[</span><span class="s1">'entries'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">'arxiv_doi'</span><span class="p">]</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'This paper has been published under DOI '</span> <span class="o">+</span> <span class="n">arxiv_DOI</span> <span class="o">+</span> <span class="s1">'. Please comment on the published version.'</span><span class="p">)</span> - <span class="k">except</span><span class="p">:</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span> <span class="k">pass</span> - <span class="k">if</span> <span class="n">errormessage</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span> + + <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span> <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">()</span> <span class="n">doiform</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">()</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">,</span> <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> <span class="s1">'existing_commentary'</span><span class="p">:</span> <span class="n">existing_commentary</span><span class="p">}</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> + <span class="c1"># otherwise prefill the form:</span> <span class="n">metadata</span> <span class="o">=</span> <span class="n">arxivquery</span> <span class="n">pub_title</span> <span class="o">=</span> <span class="n">arxivquery</span><span class="p">[</span><span class="s1">'entries'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">'title'</span><span class="p">]</span> @@ -376,7 +384,7 @@ <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'doiform'</span><span class="p">:</span> <span class="n">doiform</span><span class="p">,</span> <span class="s1">'identifierform'</span><span class="p">:</span> <span class="n">identifierform</span><span class="p">}</span> <span class="n">context</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]</span> <span class="o">=</span> <span class="n">pub_title</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> - <span class="k">except</span><span class="p">:</span> <span class="c1"># something went wrong with processing the arXiv data</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span> <span class="c1"># something went wrong with processing the arXiv data</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'An error occurred while processing the arXiv data. Are you sure this identifier exists?'</span> <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">()</span> <span class="n">doiform</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">()</span> @@ -384,7 +392,6 @@ <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> <span class="s1">'existing_commentary'</span><span class="p">:</span> <span class="n">existing_commentary</span><span class="p">}</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/request_commentary.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> -<span class="c1"># pass</span> <span class="k">else</span><span class="p">:</span> <span class="k">pass</span> <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">'commentaries:request_commentary'</span><span class="p">))</span></div> @@ -470,8 +477,6 @@ <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> <span class="n">commentary</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span> - <span class="c1">#context = {'commentary_id': commentary_id }</span> - <span class="c1">#return render(request, 'commentaries/vet_commentary_request_ack.html', context)</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ack_header'</span><span class="p">:</span> <span class="s1">'SciPost Commentary request vetted.'</span><span class="p">,</span> <span class="s1">'followup_message'</span><span class="p">:</span> <span class="s1">'Return to the '</span><span class="p">,</span> <span class="s1">'followup_link'</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">'commentaries:vet_commentary_requests'</span><span class="p">),</span> @@ -521,7 +526,7 @@ <span class="n">commentary_search_list</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'-pub_date'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">commentary_search_list</span> <span class="o">=</span> <span class="p">[]</span> - <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'commentary_search_list'</span><span class="p">:</span> <span class="n">commentary_search_list</span> <span class="p">}</span> + <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'commentary_search_list'</span><span class="p">:</span> <span class="n">commentary_search_list</span><span class="p">}</span> <span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'commentaries/commentaries.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">form</span> <span class="o">=</span> <span class="n">CommentarySearchForm</span><span class="p">()</span> @@ -536,34 +541,27 @@ <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> <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">arxiv_or_DOI_string</span><span class="o">=</span><span class="n">arxiv_or_DOI_string</span><span class="p">)</span> -<span class="c1"># other_versions = Commentary.objects.filter(</span> -<span class="c1"># arxiv_identifier_wo_vn_nr=submission.arxiv_identifier_wo_vn_nr</span> -<span class="c1"># ).exclude(pk=submission.id)</span> <span class="n">comments</span> <span class="o">=</span> <span class="n">commentary</span><span class="o">.</span><span class="n">comment_set</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <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">'POST'</span><span class="p">:</span> <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="p">)</span> <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span> <span class="n">author</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> - <span class="n">newcomment</span> <span class="o">=</span> <span class="n">Comment</span> <span class="p">(</span> - <span class="n">commentary</span> <span class="o">=</span> <span class="n">commentary</span><span class="p">,</span> - <span class="n">author</span> <span class="o">=</span> <span class="n">author</span><span class="p">,</span> - <span class="n">is_rem</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">'is_rem'</span><span class="p">],</span> - <span class="n">is_que</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">'is_que'</span><span class="p">],</span> - <span class="n">is_ans</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">'is_ans'</span><span class="p">],</span> - <span class="n">is_obj</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">'is_obj'</span><span class="p">],</span> - <span class="n">is_rep</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">'is_rep'</span><span class="p">],</span> - <span class="n">is_val</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">'is_val'</span><span class="p">],</span> - <span class="n">is_lit</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">'is_lit'</span><span class="p">],</span> - <span class="n">is_sug</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">'is_sug'</span><span class="p">],</span> - <span class="n">comment_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">'comment_text'</span><span class="p">],</span> - <span class="n">remarks_for_editors</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">'remarks_for_editors'</span><span class="p">],</span> - <span class="n">date_submitted</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="n">newcomment</span> <span class="o">=</span> <span class="n">Comment</span><span class="p">(</span><span class="n">commentary</span><span class="o">=</span><span class="n">commentary</span><span class="p">,</span> <span class="n">author</span><span class="o">=</span><span class="n">author</span><span class="p">,</span> + <span class="n">is_rem</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">'is_rem'</span><span class="p">],</span> + <span class="n">is_que</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">'is_que'</span><span class="p">],</span> + <span class="n">is_ans</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">'is_ans'</span><span class="p">],</span> + <span class="n">is_obj</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">'is_obj'</span><span class="p">],</span> + <span class="n">is_rep</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">'is_rep'</span><span class="p">],</span> + <span class="n">is_val</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">'is_val'</span><span class="p">],</span> + <span class="n">is_lit</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">'is_lit'</span><span class="p">],</span> + <span class="n">is_sug</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">'is_sug'</span><span class="p">],</span> + <span class="n">comment_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">'comment_text'</span><span class="p">],</span> + <span class="n">remarks_for_editors</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">'remarks_for_editors'</span><span class="p">],</span> + <span class="n">date_submitted</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="p">)</span> <span class="n">newcomment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> <span class="n">author</span><span class="o">.</span><span class="n">nr_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">filter</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">author</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="n">author</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> - <span class="c1">#request.session['commentary_id'] = commentary.id</span> - <span class="c1">#return HttpResponseRedirect(reverse('comments:comment_submission_ack'))</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ack_header'</span><span class="p">:</span> <span class="s1">'Thank you for contributing a Comment.'</span><span class="p">,</span> <span class="s1">'ack_message'</span><span class="p">:</span> <span class="s1">'It will soon be vetted by an Editor.'</span><span class="p">,</span> <span class="s1">'followup_message'</span><span class="p">:</span> <span class="s1">'Back to the '</span><span class="p">,</span> @@ -576,7 +574,6 @@ <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/acknowledgement.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">()</span> - <span class="k">try</span><span class="p">:</span> <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><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> diff --git a/docs/_build/html/_modules/comments/models.html b/docs/_build/html/_modules/comments/models.html index 2bb4d6f39..910194b7f 100644 --- a/docs/_build/html/_modules/comments/models.html +++ b/docs/_build/html/_modules/comments/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html index d542b9137..b34147da7 100644 --- a/docs/_build/html/_modules/index.html +++ b/docs/_build/html/_modules/index.html @@ -83,8 +83,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> diff --git a/docs/_build/html/_modules/journals/models.html b/docs/_build/html/_modules/journals/models.html index 19b366e31..aaba5cd54 100644 --- a/docs/_build/html/_modules/journals/models.html +++ b/docs/_build/html/_modules/journals/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -332,13 +334,14 @@ <span class="k">def</span> <span class="nf">citation</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">(</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">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">name</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</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> - <span class="o">+</span> <span class="s1">'('</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">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'), '</span> - <span class="o">+</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> + <span class="c1">#+ '(' + str(self.in_issue.number) + ')'</span> + <span class="o">+</span> <span class="s1">', '</span> <span class="o">+</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> <span class="o">+</span> <span class="s1">' ('</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">'%Y'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')'</span> <span class="p">)</span> <span class="k">def</span> <span class="nf">citation_for_web</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="n">citation</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'{{ abbrev }} <strong>{{ volume_nr }}</strong>({{ issue_nr }}), '</span> - <span class="s1">'{{ paper_nr }} ({{ year }})'</span><span class="p">)</span> + <span class="n">citation</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'{{ abbrev }} <strong>{{ volume_nr }}</strong>'</span> + <span class="c1">#'({{ issue_nr }})'</span> + <span class="s1">', {{ paper_nr }} ({{ year }})'</span><span class="p">)</span> <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">citation</span><span class="p">)</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span> <span class="p">{</span><span class="s1">'abbrev'</span><span class="p">:</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">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">name</span><span class="p">),</span> @@ -350,8 +353,9 @@ <span class="k">def</span> <span class="nf">citation_for_web_linked</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">citation</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<a href="{</span><span class="si">% u</span><span class="s1">rl </span><span class="se">\'</span><span class="s1">scipost:publication_detail</span><span class="se">\'</span><span class="s1"> doi_string=doi_string %}">'</span> - <span class="s1">'{{ abbrev }} <strong>{{ volume_nr }}</strong>({{ issue_nr }}), '</span> - <span class="s1">'{{ paper_nr }} ({{ year }})'</span><span class="p">)</span> + <span class="s1">'{{ abbrev }} <strong>{{ volume_nr }}</strong>'</span> + <span class="c1">#'({{ issue_nr }})'</span> + <span class="s1">', {{ paper_nr }} ({{ year }})'</span><span class="p">)</span> <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">citation</span><span class="p">)</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span> <span class="p">{</span><span class="s1">'doi_string'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span> diff --git a/docs/_build/html/_modules/journals/views.html b/docs/_build/html/_modules/journals/views.html index 489b7e15a..f72a240f8 100644 --- a/docs/_build/html/_modules/journals/views.html +++ b/docs/_build/html/_modules/journals/views.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -337,9 +339,12 @@ <span class="n">current_issue</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Issue</span><span class="p">,</span> <span class="n">pk</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">'to_be_issued_in'</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="c1"># Determine next available paper number:</span> - <span class="n">papers_in_current_issue</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="n">current_issue</span><span class="p">)</span> + <span class="c1">#papers_in_current_issue = Publication.objects.filter(in_issue=current_issue)</span> + <span class="n">papers_in_current_volume</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="n">paper_nr</span> <span class="o">=</span> <span class="mi">1</span> - <span class="k">while</span> <span class="n">papers_in_current_issue</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">paper_nr</span><span class="o">=</span><span class="n">paper_nr</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span> + <span class="c1">#while papers_in_current_issue.filter(paper_nr=paper_nr).exists():</span> + <span class="k">while</span> <span class="n">papers_in_current_volume</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">paper_nr</span><span class="o">=</span><span class="n">paper_nr</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span> <span class="n">paper_nr</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">paper_nr</span> <span class="o">></span> <span class="mi">999</span><span class="p">:</span> <span class="k">raise</span> <span class="n">PaperNumberingError</span><span class="p">(</span><span class="n">paper_nr</span><span class="p">)</span> @@ -422,7 +427,7 @@ <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> <span class="c1"># Move file to final location</span> <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> - <span class="n">new_dir</span> <span class="o">=</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">path</span> + <span class="n">new_dir</span> <span class="o">=</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">path</span> <span class="o">+</span> <span class="s1">'/'</span> <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="n">new_path</span> <span class="o">=</span> <span class="n">new_dir</span> <span class="o">+</span> <span class="s1">'/'</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">'.'</span><span class="p">,</span> <span class="s1">'_'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.pdf'</span> <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> diff --git a/docs/_build/html/_modules/scipost/models.html b/docs/_build/html/_modules/scipost/models.html index 8b24fabcf..6d747a991 100644 --- a/docs/_build/html/_modules/scipost/models.html +++ b/docs/_build/html/_modules/scipost/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -143,7 +145,7 @@ <span class="kn">from</span> <span class="nn">django_countries.fields</span> <span class="k">import</span> <span class="n">CountryField</span> -<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="o">*</span> +<span class="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="o">*</span> <span class="n">SCIPOST_DISCIPLINES</span> <span class="o">=</span> <span class="p">(</span> @@ -261,7 +263,8 @@ <span class="p">),</span> <span class="p">)</span> <span class="n">subject_areas_raw_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">)</span> -<span class="c1"># We want a dict of the form {'Phys:AT': 'Atomic...', ...}</span> + +<span class="c1"># Make dict of the form {'Phys:AT': 'Atomic...', ...}</span> <span class="n">subject_areas_dict</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">subject_areas_raw_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="n">subject_areas_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">subject_areas_raw_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]))</span> @@ -325,8 +328,7 @@ <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="mi">0</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">CONTRIBUTOR_STATUS</span><span class="p">)</span> <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> <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">'physics'</span><span class="p">,</span> - <span class="n">verbose_name</span><span class="o">=</span><span class="s1">'Main discipline'</span><span class="p">)</span> + <span class="n">default</span><span class="o">=</span><span class="s1">'physics'</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">'Main discipline'</span><span class="p">)</span> <span class="n">expertises</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span> <span class="n">models</span><span class="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> @@ -345,36 +347,34 @@ <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="s2">"I accept to receive SciPost emails"</span><span class="p">)</span> - <span class="k">def</span> <span class="nf">__str__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</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="o">+</span> <span class="s1">', '</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">first_name</span> + <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">, </span><span class="si">%s</span><span class="s1">'</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> <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> - <span class="n">unav_periods</span> <span class="o">=</span> <span class="n">UnavailabilityPeriod</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">contributor</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> - <span class="n">available</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">unav_periods</span> <span class="o">=</span> <span class="n">UnavailabilityPeriod</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">contributor</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> + <span class="n">today</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> <span class="k">for</span> <span class="n">unav</span> <span class="ow">in</span> <span class="n">unav_periods</span><span class="p">:</span> <span class="k">if</span> <span class="n">unav</span><span class="o">.</span><span class="n">start</span> <span class="o"><</span> <span class="n">today</span> <span class="ow">and</span> <span class="n">unav</span><span class="o">.</span><span class="n">end</span> <span class="o">></span> <span class="n">today</span><span class="p">:</span> - <span class="n">available</span> <span class="o">=</span> <span class="kc">False</span> - <span class="k">return</span> <span class="n">available</span> - + <span class="k">return</span> <span class="kc">False</span> + <span class="k">return</span> <span class="kc">True</span> - <span class="k">def</span> <span class="nf">private_info_as_table</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">private_info_as_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s1">'''</span> -<span class="s1"> <table></span> -<span class="s1"> <tr><td>Title: </td><td>&nbsp;</td><td>{{ title }}</td></tr></span> -<span class="s1"> <tr><td>First name: </td><td>&nbsp;</td><td>{{ first_name }}</td></tr></span> -<span class="s1"> <tr><td>Last name: </td><td>&nbsp;</td><td>{{ last_name }}</td></tr></span> -<span class="s1"> <tr><td>Email: </td><td>&nbsp;</td><td>{{ email }}</td></tr></span> -<span class="s1"> <tr><td>ORCID id: </td><td>&nbsp;</td><td>{{ orcid_id }}</td></tr></span> -<span class="s1"> <tr><td>Country of employment: </td><td>&nbsp;</td></span> -<span class="s1"> <td>{{ country_of_employment }}</td></tr></span> -<span class="s1"> <tr><td>Affiliation: </td><td>&nbsp;</td><td>{{ affiliation }}</td></tr></span> -<span class="s1"> <tr><td>Address: </td><td>&nbsp;</td><td>{{ address }}</td></tr></span> -<span class="s1"> <tr><td>Personal web page: </td><td>&nbsp;</td><td>{{ personalwebpage }}</td></tr></span> -<span class="s1"> <tr><td>Accept SciPost emails: </td><td>&nbsp;</td><td>{{ accepts_SciPost_emails }}</td></tr></span> -<span class="s1"> </table></span> +<span class="s1"> <table></span> +<span class="s1"> <tr><td>Title: </td><td>&nbsp;</td><td>{{ title }}</td></tr></span> +<span class="s1"> <tr><td>First name: </td><td>&nbsp;</td><td>{{ first_name }}</td></tr></span> +<span class="s1"> <tr><td>Last name: </td><td>&nbsp;</td><td>{{ last_name }}</td></tr></span> +<span class="s1"> <tr><td>Email: </td><td>&nbsp;</td><td>{{ email }}</td></tr></span> +<span class="s1"> <tr><td>ORCID id: </td><td>&nbsp;</td><td>{{ orcid_id }}</td></tr></span> +<span class="s1"> <tr><td>Country of employment: </td><td>&nbsp;</td></span> +<span class="s1"> <td>{{ country_of_employment }}</td></tr></span> +<span class="s1"> <tr><td>Affiliation: </td><td>&nbsp;</td><td>{{ affiliation }}</td></tr></span> +<span class="s1"> <tr><td>Address: </td><td>&nbsp;</td><td>{{ address }}</td></tr></span> +<span class="s1"> <tr><td>Personal web page: </td><td>&nbsp;</td><td>{{ personalwebpage }}</td></tr></span> +<span class="s1"> <tr><td>Accept SciPost emails: </td><td>&nbsp;</td><td>{{ accepts_SciPost_emails }}</td></tr></span> +<span class="s1"> </table></span> <span class="s1"> '''</span><span class="p">)</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span> <span class="s1">'title'</span><span class="p">:</span> <span class="n">title_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">],</span> @@ -391,21 +391,20 @@ <span class="k">return</span> <span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span> -<div class="viewcode-block" id="Contributor.public_info_as_table"><a class="viewcode-back" href="../../modules/models.html#scipost.models.Contributor.public_info_as_table">[docs]</a> <span class="k">def</span> <span class="nf">public_info_as_table</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="sd">"""</span> -<span class="sd"> Prints out all publicly-accessible info as a table.</span> -<span class="sd"> """</span> +<div class="viewcode-block" id="Contributor.public_info_as_table"><a class="viewcode-back" href="../../modules/models.html#scipost.models.Contributor.public_info_as_table">[docs]</a> <span class="k">def</span> <span class="nf">public_info_as_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Prints out all publicly-accessible info as a table."""</span> + <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s1">'''</span> -<span class="s1"> <table></span> -<span class="s1"> <tr><td>Title: </td><td>&nbsp;</td><td>{{ title }}</td></tr></span> -<span class="s1"> <tr><td>First name: </td><td>&nbsp;</td><td>{{ first_name }}</td></tr></span> -<span class="s1"> <tr><td>Last name: </td><td>&nbsp;</td><td>{{ last_name }}</td></tr></span> -<span class="s1"> <tr><td>ORCID id: </td><td>&nbsp;</td><td>{{ orcid_id }}</td></tr></span> -<span class="s1"> <tr><td>Country of employment: </td><td>&nbsp;</td></span> -<span class="s1"> <td>{{ country_of_employment }}</td></tr></span> -<span class="s1"> <tr><td>Affiliation: </td><td>&nbsp;</td><td>{{ affiliation }}</td></tr></span> -<span class="s1"> <tr><td>Personal web page: </td><td>&nbsp;</td><td>{{ personalwebpage }}</td></tr></span> -<span class="s1"> </table></span> +<span class="s1"> <table></span> +<span class="s1"> <tr><td>Title: </td><td>&nbsp;</td><td>{{ title }}</td></tr></span> +<span class="s1"> <tr><td>First name: </td><td>&nbsp;</td><td>{{ first_name }}</td></tr></span> +<span class="s1"> <tr><td>Last name: </td><td>&nbsp;</td><td>{{ last_name }}</td></tr></span> +<span class="s1"> <tr><td>ORCID id: </td><td>&nbsp;</td><td>{{ orcid_id }}</td></tr></span> +<span class="s1"> <tr><td>Country of employment: </td><td>&nbsp;</td></span> +<span class="s1"> <td>{{ country_of_employment }}</td></tr></span> +<span class="s1"> <tr><td>Affiliation: </td><td>&nbsp;</td><td>{{ affiliation }}</td></tr></span> +<span class="s1"> <tr><td>Personal web page: </td><td>&nbsp;</td><td>{{ personalwebpage }}</td></tr></span> +<span class="s1"> </table></span> <span class="s1"> '''</span><span class="p">)</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span> <span class="s1">'title'</span><span class="p">:</span> <span class="n">title_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">],</span> @@ -426,7 +425,7 @@ <span class="k">def</span> <span class="nf">expertises_as_ul</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">output</span> <span class="o">=</span> <span class="s1">'<ul>'</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> - <span class="n">output</span> <span class="o">+=</span> <span class="s1">'<li>'</span> <span class="o">+</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="s1">'</li>'</span> + <span class="n">output</span> <span class="o">+=</span> <span class="s1">'<li></span><span class="si">%s</span><span class="s1"></li>'</span> <span class="o">%</span> <span class="n">subject_areas_dict</span><span class="p">[</span><span class="n">exp</span><span class="p">]</span> <span class="n">output</span> <span class="o">+=</span> <span class="s1">'</ul>'</span> <span class="k">return</span> <span class="n">mark_safe</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> @@ -521,6 +520,31 @@ <span class="p">(</span><span class="s1">'P'</span><span class="p">,</span> <span class="s1">'personal'</span><span class="p">),</span> <span class="p">)</span> +<div class="viewcode-block" id="DraftInvitation"><a class="viewcode-back" href="../../modules/models.html#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> + <span class="sd">"""</span> +<span class="sd"> Draft of an invitation, filled in by an officer.</span> +<span class="sd"> """</span> + <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> + <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> <span class="n">default</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span> + <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> <span class="n">default</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span> + <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> + <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> <span class="n">default</span><span class="o">=</span><span class="s1">'C'</span><span class="p">)</span> + <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">'submissions.Submission'</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> + <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">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">'journals.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> + <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">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="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> + <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">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">default</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="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> + + <span class="k">def</span> <span class="nf">__str__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <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">' '</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">' '</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> + + <div class="viewcode-block" id="RegistrationInvitation"><a class="viewcode-back" href="../../modules/models.html#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> <span class="sd">"""</span> <span class="sd"> Invitation to particular persons for registration</span> @@ -580,88 +604,6 @@ <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> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span></div> - -<span class="c1">#######################</span> -<span class="c1">### Assessments objects</span> -<span class="c1">#######################</span> - - -<span class="c1">### Assessments</span> - -<span class="c1">#ASSESSMENT_CHOICES = (</span> -<span class="c1"># (101, '-'), # Only values between 0 and 100 are kept, anything outside limits is discarded.</span> -<span class="c1"># (100, 'top'), (80, 'high'), (60, 'good'), (40, 'ok'), (20, 'low'), (0, 'poor')</span> -<span class="c1"># )</span> - -<span class="c1">#class Assessment(models.Model):</span> -<span class="c1"># """</span> -<span class="c1"># Base class for all assessments.</span> -<span class="c1"># """</span> -<span class="c1"># rater = models.ForeignKey(Contributor, on_delete=models.CASCADE)</span> -<span class="c1"># submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE, blank=True, null=True)</span> -<span class="c1"># comment = models.ForeignKey('comments.Comment', on_delete=models.CASCADE, blank=True, null=True)</span> -<span class="c1"># relevance = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># importance = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># clarity = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># validity = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># rigour = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># originality = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> -<span class="c1"># significance = models.PositiveSmallIntegerField(choices=ASSESSMENT_CHOICES, default=101)</span> - - -<span class="c1">### Opinions</span> - -<span class="c1">#OPINION_CHOICES = (</span> -<span class="c1"># ('ABS', '-'),</span> -<span class="c1"># ('A', 'agree'),</span> -<span class="c1"># ('N', 'not sure'),</span> -<span class="c1"># ('D', 'disagree'),</span> -<span class="c1">#)</span> -<span class="c1">#opinion_choices_dict = dict(OPINION_CHOICES)</span> - -<span class="c1">#class Opinion(models.Model):</span> -<span class="c1"># rater = models.ForeignKey(Contributor, on_delete=models.CASCADE)</span> -<span class="c1"># comment = models.ForeignKey('comments.Comment', on_delete=models.CASCADE)</span> -<span class="c1"># opinion = models.CharField(max_length=3, choices=OPINION_CHOICES, default='ABS')</span> - - -<span class="c1">### AssessmentAggregates</span> - -<span class="c1">#class AssessmentAggregate(models.Model):</span> -<span class="c1"># """</span> -<span class="c1"># Aggregated assessments for an object.</span> -<span class="c1"># """</span> -<span class="c1"># nr = models.PositiveSmallIntegerField(default=0)</span> -<span class="c1"># nr_relevance_ratings = models.IntegerField(default=0)</span> -<span class="c1"># relevance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_importance_ratings = models.IntegerField(default=0)</span> -<span class="c1"># importance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_clarity_ratings = models.IntegerField(default=0)</span> -<span class="c1"># clarity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_validity_ratings = models.IntegerField(default=0)</span> -<span class="c1"># validity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_rigour_ratings = models.IntegerField(default=0)</span> -<span class="c1"># rigour_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_originality_ratings = models.IntegerField(default=0)</span> -<span class="c1"># originality_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> -<span class="c1"># nr_significance_ratings = models.IntegerField(default=0)</span> -<span class="c1"># significance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)</span> - - -<span class="c1">##########</span> -<span class="c1"># Emails #</span> -<span class="c1">##########</span> - -<span class="c1"># class EmailedTo(models.Model):</span> -<span class="c1"># """</span> -<span class="c1"># An email address used for emailing.</span> -<span class="c1"># An instance is created by a method as send_precooked_email</span> -<span class="c1"># if the chosen message hasn't been sent to this address before.</span> -<span class="c1"># Helps prevent multiple emailing with same message.</span> -<span class="c1"># """</span> -<span class="c1"># email = models.EmailField()</span> - - <span class="n">SCIPOST_FROM_ADDRESSES</span> <span class="o">=</span> <span class="p">(</span> <span class="p">(</span><span class="s1">'Admin'</span><span class="p">,</span> <span class="s1">'SciPost Admin <admin@scipost.org>'</span><span class="p">),</span> <span class="p">(</span><span class="s1">'J.-S. Caux'</span><span class="p">,</span> <span class="s1">'J.-S. Caux <jscaux@scipost.org>'</span><span class="p">),</span> @@ -680,7 +622,6 @@ <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> <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> <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> - <span class="c1">#emailed_to = models.ManyToManyField(EmailedTo, blank=True)</span> <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> <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> <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> @@ -769,8 +710,7 @@ <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="p">(</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">' (owner: '</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">' '</span> - <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">')'</span><span class="p">)</span> + <span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> (owner: </span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</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="bp">self</span><span class="o">.</span><span class="n">owner</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">owner</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="k">def</span> <span class="nf">header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> @@ -839,7 +779,7 @@ <span class="sd"> Team of Contributors, to enable private collaborations.</span> <span class="sd"> """</span> <span class="n">leader</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> - <span class="n">members</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="n">Contributor</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">'team_members'</span><span class="p">)</span> + <span class="n">members</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="n">Contributor</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">'team_members'</span><span class="p">)</span> <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">established</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> @@ -888,8 +828,7 @@ <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="p">(</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">' (owner: '</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">' '</span> - <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">')'</span><span class="p">)</span> + <span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> (owner: </span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</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="bp">self</span><span class="o">.</span><span class="n">owner</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">owner</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="k">def</span> <span class="nf">header_as_li</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span><span class="s1">'id'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="s1">'title'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">,</span> diff --git a/docs/_build/html/_modules/scipost/views.html b/docs/_build/html/_modules/scipost/views.html index c193238b0..4cca70f90 100644 --- a/docs/_build/html/_modules/scipost/views.html +++ b/docs/_build/html/_modules/scipost/views.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -141,7 +143,6 @@ <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="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="k">import</span> <span class="n">authenticate</span><span class="p">,</span> <span class="n">login</span><span class="p">,</span> <span class="n">logout</span> <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="c1">#from django.contrib.auth.decorators import permission_required # Superseded by guardian</span> <span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="k">import</span> <span class="n">User</span><span class="p">,</span> <span class="n">Group</span><span class="p">,</span> <span class="n">Permission</span> <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> <span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">MultipleObjectsReturned</span><span class="p">,</span> <span class="n">ObjectDoesNotExist</span><span class="p">,</span> <span class="n">PermissionDenied</span> @@ -609,8 +610,109 @@ <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/acknowledgement.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> +<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">'scipost.can_draft_registration_invitations'</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<div class="viewcode-block" id="draft_registration_invitation"><a class="viewcode-back" href="../../modules/views.html#scipost.views.draft_registration_invitation">[docs]</a><span class="k">def</span> <span class="nf">draft_registration_invitation</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> For officers to prefill registration invitations.</span> +<span class="sd"> This is similar to the registration_invitations method,</span> +<span class="sd"> which is used to complete the invitation process.</span> +<span class="sd"> """</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">''</span> + <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">'POST'</span><span class="p">:</span> + <span class="n">draft_inv_form</span> <span class="o">=</span> <span class="n">DraftInvitationForm</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">Utils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">'contributor'</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> <span class="s1">'form'</span><span class="p">:</span> <span class="n">draft_inv_form</span><span class="p">})</span> + <span class="k">if</span> <span class="n">draft_inv_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span> + <span class="k">if</span> <span class="n">Utils</span><span class="o">.</span><span class="n">email_already_invited</span><span class="p">():</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'DUPLICATE ERROR: '</span> + <span class="s1">'This email address has already been used for an invitation'</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">Utils</span><span class="o">.</span><span class="n">email_already_drafted</span><span class="p">():</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'DUPLICATE ERROR: '</span> + <span class="s1">'This email address has already been used for a draft invitation'</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">Utils</span><span class="o">.</span><span class="n">email_already_taken</span><span class="p">():</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'DUPLICATE ERROR: '</span> + <span class="s1">'This email address is already associated to a Contributor'</span><span class="p">)</span> + <span class="k">elif</span> <span class="p">(</span><span class="n">draft_inv_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'invitation_type'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'F'</span> + <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">has_perm</span><span class="p">(</span><span class="s1">'scipost.can_invite_Fellows'</span><span class="p">)):</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'You do not have the authorization to send a Fellow-type '</span> + <span class="s1">'invitation. Consider Contributor, or cited (sub/pub). '</span><span class="p">)</span> + <span class="k">elif</span> <span class="p">(</span><span class="n">draft_inv_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'invitation_type'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'R'</span><span class="p">):</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'Referee-type invitations must be made by the Editor-in-charge '</span> + <span class="s1">'at the relevant Submission</span><span class="se">\'</span><span class="s1">s Editorial Page. '</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">Utils</span><span class="o">.</span><span class="n">create_draft_invitation</span><span class="p">()</span> + <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ack_header'</span><span class="p">:</span> <span class="s1">'Draft invitation saved.'</span><span class="p">,</span> + <span class="s1">'followup_message'</span><span class="p">:</span> <span class="s1">'Return to the '</span><span class="p">,</span> + <span class="s1">'followup_link'</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">'scipost:draft_registration_invitation'</span><span class="p">),</span> + <span class="s1">'followup_link_label'</span><span class="p">:</span> <span class="s1">'drafting page'</span><span class="p">}</span> + <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/acknowledgement.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'The form was not filled validly.'</span> + + <span class="k">else</span><span class="p">:</span> + <span class="n">draft_inv_form</span> <span class="o">=</span> <span class="n">DraftInvitationForm</span><span class="p">()</span> + + <span class="n">sent_reg_inv</span> <span class="o">=</span> <span class="n">RegistrationInvitation</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">responded</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">declined</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">sent_reg_inv_fellows</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'F'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_sent_reg_inv_fellows</span> <span class="o">=</span> <span class="n">sent_reg_inv_fellows</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">sent_reg_inv_contrib</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'C'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_sent_reg_inv_contrib</span> <span class="o">=</span> <span class="n">sent_reg_inv_contrib</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">sent_reg_inv_ref</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'R'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_sent_reg_inv_ref</span> <span class="o">=</span> <span class="n">sent_reg_inv_ref</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">sent_reg_inv_cited_sub</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'ci'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_sent_reg_inv_cited_sub</span> <span class="o">=</span> <span class="n">sent_reg_inv_cited_sub</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">sent_reg_inv_cited_pub</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'cp'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_sent_reg_inv_cited_pub</span> <span class="o">=</span> <span class="n">sent_reg_inv_cited_pub</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + + <span class="n">resp_reg_inv</span> <span class="o">=</span> <span class="n">RegistrationInvitation</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">responded</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">declined</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">resp_reg_inv_fellows</span> <span class="o">=</span> <span class="n">resp_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'F'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_resp_reg_inv_fellows</span> <span class="o">=</span> <span class="n">resp_reg_inv_fellows</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">resp_reg_inv_contrib</span> <span class="o">=</span> <span class="n">resp_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'C'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_resp_reg_inv_contrib</span> <span class="o">=</span> <span class="n">resp_reg_inv_contrib</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">resp_reg_inv_ref</span> <span class="o">=</span> <span class="n">resp_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'R'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_resp_reg_inv_ref</span> <span class="o">=</span> <span class="n">resp_reg_inv_ref</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">resp_reg_inv_cited_sub</span> <span class="o">=</span> <span class="n">resp_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'ci'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_resp_reg_inv_cited_sub</span> <span class="o">=</span> <span class="n">resp_reg_inv_cited_sub</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + <span class="n">resp_reg_inv_cited_pub</span> <span class="o">=</span> <span class="n">resp_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'cp'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> + <span class="n">nr_resp_reg_inv_cited_pub</span> <span class="o">=</span> <span class="n">resp_reg_inv_cited_pub</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> + + <span class="n">decl_reg_inv</span> <span class="o">=</span> <span class="n">RegistrationInvitation</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">responded</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">declined</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">'last_name'</span><span class="p">)</span> + + <span class="n">names_reg_contributors</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> + <span class="n">status</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'user__last_name'</span><span class="p">)</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span> + <span class="s1">'user__first_name'</span><span class="p">,</span> <span class="s1">'user__last_name'</span><span class="p">)</span> + <span class="n">existing_drafts</span> <span class="o">=</span> <span class="n">DraftInvitation</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">processed</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">'last_name'</span><span class="p">)</span> + + <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'draft_inv_form'</span><span class="p">:</span> <span class="n">draft_inv_form</span><span class="p">,</span> <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> + <span class="s1">'sent_reg_inv_fellows'</span><span class="p">:</span> <span class="n">sent_reg_inv_fellows</span><span class="p">,</span> + <span class="s1">'nr_sent_reg_inv_fellows'</span><span class="p">:</span> <span class="n">nr_sent_reg_inv_fellows</span><span class="p">,</span> + <span class="s1">'sent_reg_inv_contrib'</span><span class="p">:</span> <span class="n">sent_reg_inv_contrib</span><span class="p">,</span> + <span class="s1">'nr_sent_reg_inv_contrib'</span><span class="p">:</span> <span class="n">nr_sent_reg_inv_contrib</span><span class="p">,</span> + <span class="s1">'sent_reg_inv_ref'</span><span class="p">:</span> <span class="n">sent_reg_inv_ref</span><span class="p">,</span> + <span class="s1">'nr_sent_reg_inv_ref'</span><span class="p">:</span> <span class="n">nr_sent_reg_inv_ref</span><span class="p">,</span> + <span class="s1">'sent_reg_inv_cited_sub'</span><span class="p">:</span> <span class="n">sent_reg_inv_cited_sub</span><span class="p">,</span> + <span class="s1">'nr_sent_reg_inv_cited_sub'</span><span class="p">:</span> <span class="n">nr_sent_reg_inv_cited_sub</span><span class="p">,</span> + <span class="s1">'sent_reg_inv_cited_pub'</span><span class="p">:</span> <span class="n">sent_reg_inv_cited_pub</span><span class="p">,</span> + <span class="s1">'nr_sent_reg_inv_cited_pub'</span><span class="p">:</span> <span class="n">nr_sent_reg_inv_cited_pub</span><span class="p">,</span> + <span class="s1">'resp_reg_inv_fellows'</span><span class="p">:</span> <span class="n">resp_reg_inv_fellows</span><span class="p">,</span> + <span class="s1">'nr_resp_reg_inv_fellows'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_fellows</span><span class="p">,</span> + <span class="s1">'resp_reg_inv_contrib'</span><span class="p">:</span> <span class="n">resp_reg_inv_contrib</span><span class="p">,</span> + <span class="s1">'nr_resp_reg_inv_contrib'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_contrib</span><span class="p">,</span> + <span class="s1">'resp_reg_inv_ref'</span><span class="p">:</span> <span class="n">resp_reg_inv_ref</span><span class="p">,</span> + <span class="s1">'nr_resp_reg_inv_ref'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_ref</span><span class="p">,</span> + <span class="s1">'resp_reg_inv_cited_sub'</span><span class="p">:</span> <span class="n">resp_reg_inv_cited_sub</span><span class="p">,</span> + <span class="s1">'nr_resp_reg_inv_cited_sub'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_cited_sub</span><span class="p">,</span> + <span class="s1">'resp_reg_inv_cited_pub'</span><span class="p">:</span> <span class="n">resp_reg_inv_cited_pub</span><span class="p">,</span> + <span class="s1">'nr_resp_reg_inv_cited_pub'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_cited_pub</span><span class="p">,</span> + <span class="s1">'decl_reg_inv'</span><span class="p">:</span> <span class="n">decl_reg_inv</span><span class="p">,</span> + <span class="s1">'names_reg_contributors'</span><span class="p">:</span> <span class="n">names_reg_contributors</span><span class="p">,</span> + <span class="s1">'existing_drafts'</span><span class="p">:</span> <span class="n">existing_drafts</span><span class="p">,</span> + <span class="p">}</span> + <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/draft_registration_invitation.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div> + + <span class="nd">@permission_required</span><span class="p">(</span><span class="s1">'scipost.can_manage_registration_invitations'</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -<div class="viewcode-block" id="registration_invitations"><a class="viewcode-back" href="../../modules/views.html#scipost.views.registration_invitations">[docs]</a><span class="k">def</span> <span class="nf">registration_invitations</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +<div class="viewcode-block" id="registration_invitations"><a class="viewcode-back" href="../../modules/views.html#scipost.views.registration_invitations">[docs]</a><span class="k">def</span> <span class="nf">registration_invitations</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">draft_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="sd">""" Overview and tools for administrators """</span> <span class="c1"># List invitations sent; send new ones</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">''</span> @@ -635,12 +737,35 @@ <span class="k">else</span><span class="p">:</span> <span class="n">Utils</span><span class="o">.</span><span class="n">create_invitation</span><span class="p">()</span> <span class="n">Utils</span><span class="o">.</span><span class="n">send_registration_invitation_email</span><span class="p">()</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">draft</span> <span class="o">=</span> <span class="n">DraftInvitation</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">email</span><span class="o">=</span><span class="n">reg_inv_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'email'</span><span class="p">])</span> + <span class="n">draft</span><span class="o">.</span><span class="n">processed</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">draft</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> + <span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">except</span> <span class="n">MultipleObjectsReturned</span><span class="p">:</span> + <span class="c1"># Delete the first invitation</span> + <span class="n">draft_to_delete</span> <span class="o">=</span> <span class="n">RegistrationInvitation</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">email</span><span class="o">=</span><span class="n">reg_inv_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'email'</span><span class="p">])</span><span class="o">.</span><span class="n">first</span><span class="p">()</span> + <span class="n">draft_to_delete</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span> <span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="s1">'registration_invitation_sent'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">'The form was not filled validly.'</span> <span class="k">else</span><span class="p">:</span> - <span class="n">reg_inv_form</span> <span class="o">=</span> <span class="n">RegistrationInvitationForm</span><span class="p">()</span> + <span class="n">initial</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">if</span> <span class="n">draft_id</span><span class="p">:</span> + <span class="n">draft</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">DraftInvitation</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">draft_id</span><span class="p">)</span> + <span class="n">initial</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'title'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">title</span><span class="p">,</span> + <span class="s1">'first_name'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span> + <span class="s1">'last_name'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span> + <span class="s1">'email'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">email</span><span class="p">,</span> + <span class="s1">'invitation_type'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">invitation_type</span><span class="p">,</span> + <span class="s1">'cited_in_submission'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">cited_in_submission</span><span class="p">,</span> + <span class="s1">'cited_in_publication'</span><span class="p">:</span> <span class="n">draft</span><span class="o">.</span><span class="n">cited_in_publication</span><span class="p">,</span> + <span class="p">}</span> + <span class="n">reg_inv_form</span> <span class="o">=</span> <span class="n">RegistrationInvitationForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">)</span> <span class="n">sent_reg_inv</span> <span class="o">=</span> <span class="n">RegistrationInvitation</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">responded</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">declined</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="n">sent_reg_inv_fellows</span> <span class="o">=</span> <span class="n">sent_reg_inv</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invitation_type</span><span class="o">=</span><span class="s1">'F'</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'last_name'</span><span class="p">)</span> @@ -671,6 +796,7 @@ <span class="n">names_reg_contributors</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> <span class="n">status</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'user__last_name'</span><span class="p">)</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span> <span class="s1">'user__first_name'</span><span class="p">,</span> <span class="s1">'user__last_name'</span><span class="p">)</span> + <span class="n">existing_drafts</span> <span class="o">=</span> <span class="n">DraftInvitation</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">processed</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">'last_name'</span><span class="p">)</span> <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'reg_inv_form'</span><span class="p">:</span> <span class="n">reg_inv_form</span><span class="p">,</span> <span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">,</span> <span class="s1">'sent_reg_inv_fellows'</span><span class="p">:</span> <span class="n">sent_reg_inv_fellows</span><span class="p">,</span> @@ -695,6 +821,7 @@ <span class="s1">'nr_resp_reg_inv_cited_pub'</span><span class="p">:</span> <span class="n">nr_resp_reg_inv_cited_pub</span><span class="p">,</span> <span class="s1">'decl_reg_inv'</span><span class="p">:</span> <span class="n">decl_reg_inv</span><span class="p">,</span> <span class="s1">'names_reg_contributors'</span><span class="p">:</span> <span class="n">names_reg_contributors</span><span class="p">,</span> + <span class="s1">'existing_drafts'</span><span class="p">:</span> <span class="n">existing_drafts</span><span class="p">,</span> <span class="p">}</span> <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/registration_invitations.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div> diff --git a/docs/_build/html/_modules/submissions/models.html b/docs/_build/html/_modules/submissions/models.html index a2ff681c2..cc807b163 100644 --- a/docs/_build/html/_modules/submissions/models.html +++ b/docs/_build/html/_modules/submissions/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -141,8 +143,10 @@ <span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="n">ChoiceArrayField</span><span class="p">,</span> <span class="n">Contributor</span><span class="p">,</span> <span class="n">title_dict</span><span class="p">,</span> <span class="n">Remark</span> -<span class="kn">from</span> <span class="nn">scipost.models</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> <span class="n">subject_areas_dict</span><span class="p">,</span> <span class="n">TITLE_CHOICES</span> -<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_SUBMIT</span><span class="p">,</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">,</span> <span class="n">SCIPOST_JOURNALS_SPECIALIZATIONS</span> +<span class="kn">from</span> <span class="nn">scipost.models</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="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="n">subject_areas_dict</span><span class="p">,</span> <span class="n">TITLE_CHOICES</span> +<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_SUBMIT</span><span class="p">,</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span> +<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_SPECIALIZATIONS</span> <span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">journals_submit_dict</span><span class="p">,</span> <span class="n">journals_domains_dict</span><span class="p">,</span> <span class="n">journals_spec_dict</span> <span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">Publication</span> @@ -159,6 +163,9 @@ <span class="c1"># If revisions required: resubmission creates a new Submission object</span> <span class="p">(</span><span class="s1">'revision_requested'</span><span class="p">,</span> <span class="s1">'Editor-in-charge has requested revision'</span><span class="p">),</span> <span class="p">(</span><span class="s1">'resubmitted'</span><span class="p">,</span> <span class="s1">'Has been resubmitted'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'resubmitted_and_rejected'</span><span class="p">,</span> <span class="s1">'Has been resubmitted and subsequently rejected'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'resubmitted_and_rejected_visible'</span><span class="p">,</span> + <span class="s1">'Has been resubmitted and subsequently rejected (still publicly visible)'</span><span class="p">),</span> <span class="c1"># If acceptance/rejection:</span> <span class="p">(</span><span class="s1">'voting_in_preparation'</span><span class="p">,</span> <span class="s1">'Voting in preparation (eligible Fellows being selected)'</span><span class="p">),</span> <span class="p">(</span><span class="s1">'put_to_EC_voting'</span><span class="p">,</span> <span class="s1">'Undergoing voting at the Editorial College'</span><span class="p">),</span> @@ -179,22 +186,37 @@ <span class="s1">'withdrawn'</span><span class="p">,</span> <span class="p">]</span> +<span class="c1"># Submissions which should not appear in search lists</span> <span class="n">SUBMISSION_STATUS_PUBLICLY_UNLISTED</span> <span class="o">=</span> <span class="p">[</span> <span class="s1">'unassigned'</span><span class="p">,</span> <span class="s1">'assignment_failed'</span><span class="p">,</span> <span class="s1">'resubmitted'</span><span class="p">,</span> + <span class="s1">'resubmitted_rejected'</span><span class="p">,</span> + <span class="s1">'resubmitted_rejected_visible'</span><span class="p">,</span> <span class="s1">'rejected'</span><span class="p">,</span> <span class="s1">'published'</span><span class="p">,</span> <span class="s1">'withdrawn'</span><span class="p">,</span> <span class="p">]</span> +<span class="c1"># Submissions which should not be viewable (except by admins, Fellows and authors)</span> +<span class="n">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span> <span class="o">=</span> <span class="p">[</span> + <span class="s1">'unassigned'</span><span class="p">,</span> + <span class="s1">'assignment_failed'</span><span class="p">,</span> + <span class="s1">'resubmitted_rejected'</span><span class="p">,</span> + <span class="s1">'rejected'</span><span class="p">,</span> + <span class="s1">'published'</span><span class="p">,</span> + <span class="s1">'withdrawn'</span><span class="p">,</span> +<span class="p">]</span> + + <span class="c1"># SUBMISSION_ACTION_REQUIRED = (</span> <span class="c1"># ('assign_EIC', 'Editor-in-charge to be assigned'),</span> <span class="c1"># # ('Fellow_accepts_or_refuse_assignment', 'Fellow must accept or refuse assignment'),</span> <span class="c1"># ('EIC_runs_refereeing_round', 'Editor-in-charge to run refereeing round (inviting referees)'),</span> <span class="c1"># ('EIC_closes_refereeing_round', 'Editor-in-charge to close refereeing round'),</span> <span class="c1"># ('EIC_invites_author_response', 'Editor-in-charge invites authors to complete their replies'),</span> -<span class="c1"># ('EIC_formulates_editorial_recommendation', 'Editor-in-charge to formulate editorial recommendation'),</span> +<span class="c1"># ('EIC_formulates_editorial_recommendation',</span> +<span class="c1"># 'Editor-in-charge to formulate editorial recommendation'),</span> <span class="c1"># ('EC_ratification', 'Editorial College ratifies editorial recommendation'),</span> <span class="c1"># ('Decision_to_authors', 'Editor-in-charge forwards decision to authors'),</span> <span class="c1"># )</span> @@ -222,8 +244,9 @@ <span class="c1"># specialization = models.CharField(max_length=1, choices=SCIPOST_JOURNALS_SPECIALIZATIONS)</span> <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> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">'Primary subject area'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">'Phys:QP'</span><span class="p">)</span> - <span class="n">secondary_areas</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span><span class="n">models</span><span class="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> + <span class="n">secondary_areas</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span> + <span class="n">models</span><span class="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> <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="c1"># set by Editors</span> <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> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <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> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> @@ -372,14 +395,17 @@ <span class="n">nr_ref_invited</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">filter</span><span class="p">(</span><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="n">nr_ref_accepted</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">filter</span><span class="p">(</span><span class="n">submission</span><span class="o">=</span><span class="bp">self</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> <span class="n">nr_ref_declined</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">filter</span><span class="p">(</span><span class="n">submission</span><span class="o">=</span><span class="bp">self</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> - <span class="n">nr_invited_reports_in</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="mi">1</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> - <span class="n">nr_contrib_reports_in</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="mi">1</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> + <span class="n">nr_invited_reports_in</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> + <span class="n">status</span><span class="o">=</span><span class="mi">1</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> + <span class="n">nr_contrib_reports_in</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> + <span class="n">status</span><span class="o">=</span><span class="mi">1</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> <span class="n">nr_reports_awaiting_vetting</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="n">nr_reports_refused</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><span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">status__lte</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="n">header</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<p>Nr referees invited: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_ref_invited</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' ['</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_ref_accepted</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' accepted/ '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_ref_declined</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' declined/ '</span> <span class="o">+</span> - <span class="nb">str</span><span class="p">(</span><span class="n">nr_ref_invited</span> <span class="o">-</span> <span class="n">nr_ref_accepted</span> <span class="o">-</span> <span class="n">nr_ref_declined</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' response pending]</p>'</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">nr_ref_invited</span> <span class="o">-</span> <span class="n">nr_ref_accepted</span> <span class="o">-</span> <span class="n">nr_ref_declined</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">' response pending]</p>'</span> <span class="o">+</span> <span class="s1">'<p>Nr reports obtained: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_invited_reports_in</span> <span class="o">+</span> <span class="n">nr_contrib_reports_in</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' ['</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_invited_reports_in</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' invited/ '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">nr_contrib_reports_in</span><span class="p">)</span> <span class="o">+</span> @@ -408,7 +434,8 @@ <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="s1">'unassigned'</span><span class="p">:</span> <span class="n">header</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">'<p style="color: red">Status: {{ status }}.'</span> <span class="s1">' You can volunteer to become Editor-in-charge by '</span> - <span class="s1">'<a href="/submissions/volunteer_as_EIC/{{ arxiv_identifier_w_vn_nr }}">clicking here</a>.</p>'</span><span class="p">)</span> + <span class="s1">'<a href="/submissions/volunteer_as_EIC/{{ arxiv_identifier_w_vn_nr }}">'</span> + <span class="s1">'clicking here</a>.</p>'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">header</span> <span class="o">+=</span> <span class="s1">'<p>Editor-in-charge: {{ EIC }}</p><p>Status: {{ status }}</p>'</span> <span class="n">header</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">refereeing_status_as_p</span><span class="p">()</span> @@ -556,7 +583,8 @@ <span class="s1">'<p>by {{ author_list }}</p>'</span> <span class="s1">'<p> (submitted {{ date }} to {{ to_journal }})</p>'</span> <span class="s1">'<p>Status: {{ status }}</p><p>Manage this Submission from its '</span> - <span class="s1">'<a href="/submissions/editorial_page/{{ arxiv_identifier_w_vn_nr }}">Editorial Page</a>.'</span> + <span class="s1">'<a href="/submissions/editorial_page/{{ arxiv_identifier_w_vn_nr }}">'</span> + <span class="s1">'Editorial Page</a>.'</span> <span class="s1">'</p>'</span> <span class="c1">#'</div></div>'</span> <span class="s1">'</li>'</span><span class="p">)</span> @@ -640,7 +668,8 @@ <span class="k">def</span> <span class="nf">summary_as_tds</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span><span class="s1">'first_name'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span> <span class="s1">'last_name'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span> <span class="s1">'date_invited'</span><span class="p">:</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">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M'</span><span class="p">)})</span> - <span class="n">output</span> <span class="o">=</span> <span class="s1">'<td>{{ first_name }} {{ last_name }}</td><td>invited <br/>{{ date_invited }}</td><td>'</span> + <span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<td>{{ first_name }} {{ last_name }}</td><td>invited <br/>'</span> + <span class="s1">'{{ date_invited }}</td><td>'</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</span><span class="p">:</span> <span class="n">output</span> <span class="o">+=</span> <span class="s1">'<strong style="color: red;">cancelled</strong>'</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> @@ -719,8 +748,9 @@ <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> <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">'date submitted'</span><span class="p">)</span> <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="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> - <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><span class="n">choices</span><span class="o">=</span><span class="n">REFEREE_QUALIFICATION</span><span class="p">,</span> - <span class="n">verbose_name</span><span class="o">=</span><span class="s2">"Qualification to referee this: I am "</span><span class="p">)</span> + <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> + <span class="n">choices</span><span class="o">=</span><span class="n">REFEREE_QUALIFICATION</span><span class="p">,</span> + <span class="n">verbose_name</span><span class="o">=</span><span class="s2">"Qualification to referee this: I am "</span><span class="p">)</span> <span class="c1"># Text-based reporting</span> <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">weaknesses</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span> @@ -731,8 +761,10 @@ <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> <span class="n">default</span><span class="o">=</span><span class="mi">101</span><span class="p">)</span> <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> <span class="n">default</span><span class="o">=</span><span class="mi">101</span><span class="p">)</span> <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> <span class="n">default</span><span class="o">=</span><span class="mi">101</span><span class="p">)</span> - <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">verbose_name</span><span class="o">=</span><span class="s2">"Quality of paper formatting"</span><span class="p">)</span> - <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">verbose_name</span><span class="o">=</span><span class="s2">"Quality of English grammar"</span><span class="p">)</span> + <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">verbose_name</span><span class="o">=</span><span class="s2">"Quality of paper formatting"</span><span class="p">)</span> + <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">verbose_name</span><span class="o">=</span><span class="s2">"Quality of English grammar"</span><span class="p">)</span> <span class="c1">#</span> <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> <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">default</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> @@ -861,7 +893,8 @@ <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">comtype</span> <span class="o">==</span> <span class="s1">'RtoE'</span><span class="p">:</span> <span class="n">output</span> <span class="o">+=</span> <span class="s1">'From Referee '</span> <span class="k">try</span><span class="p">:</span> - <span class="n">output</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">' '</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> <span class="o">+</span> <span class="s1">' to you'</span> + <span class="n">output</span> <span class="o">+=</span> <span class="p">(</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">' '</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> <span class="o">+</span> <span class="s1">' to you'</span><span class="p">)</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">pass</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">comtype</span> <span class="o">==</span> <span class="s1">'StoE'</span><span class="p">:</span> @@ -887,7 +920,8 @@ <span class="n">verbose_name</span><span class="o">=</span><span class="s1">'optional remarks for the Editorial College'</span><span class="p">)</span> <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> <span class="c1"># Editorial Fellows who have assessed this recommendation:</span> - <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="n">Contributor</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">'eligible_to_vote'</span><span class="p">)</span> + <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="n">Contributor</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">'eligible_to_vote'</span><span class="p">)</span> <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="n">Contributor</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">'voted_for'</span><span class="p">)</span> <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="n">Contributor</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">'voted_against'</span><span class="p">)</span> <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="n">Contributor</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">'voted_abstain'</span><span class="p">)</span> diff --git a/docs/_build/html/_modules/submissions/views.html b/docs/_build/html/_modules/submissions/views.html index 2228df5a9..6e7dc05b4 100644 --- a/docs/_build/html/_modules/submissions/views.html +++ b/docs/_build/html/_modules/submissions/views.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -140,6 +142,7 @@ <span class="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="k">import</span> <span class="n">authenticate</span><span class="p">,</span> <span class="n">login</span><span class="p">,</span> <span class="n">logout</span> <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> <span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="k">import</span> <span class="n">User</span><span class="p">,</span> <span class="n">Group</span><span class="p">,</span> <span class="n">Permission</span> +<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">PermissionDenied</span> <span class="kn">from</span> <span class="nn">django.core.mail</span> <span class="k">import</span> <span class="n">EmailMessage</span> <span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span> <span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">transaction</span> @@ -200,6 +203,13 @@ <span class="n">previous_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</span><span class="p">(</span> <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="n">identifier_without_vn_nr</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">'-arxiv_vn_nr'</span><span class="p">)</span> <span class="k">if</span> <span class="n">previous_submissions</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span> + <span class="k">if</span> <span class="n">previous_submissions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'rejected'</span><span class="p">,</span> <span class="s1">'rejected_visible'</span><span class="p">,]:</span> + <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<p>This arXiv preprint has previously undergone refereeing '</span> + <span class="s1">'and has been rejected. Resubmission is only possible '</span> + <span class="s1">'if the manuscript has been substantially reworked into '</span> + <span class="s1">'a new arXiv submission with distinct identifier.</p>'</span><span class="p">)</span> + <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'scipost/error.html'</span><span class="p">,</span> + <span class="p">{</span><span class="s1">'errormessage'</span><span class="p">:</span> <span class="n">mark_safe</span><span class="p">(</span><span class="n">errormessage</span><span class="p">)})</span> <span class="c1"># If the Editorial Recommendation hasn't been formulated, ask to wait</span> <span class="k">if</span> <span class="n">previous_submissions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">status</span> <span class="o">!=</span> <span class="s1">'revision_requested'</span><span class="p">:</span> <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'<p>There exists a preprint with this arXiv identifier '</span> @@ -476,6 +486,17 @@ <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> <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> + <span class="k">try</span><span class="p">:</span> + <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> + <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> + <span class="n">is_author</span> <span class="o">=</span> <span class="kc">False</span> + <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> + <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</span><span class="o">=</span><span class="s1">'SciPost Administrators'</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> + <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</span><span class="o">=</span><span class="s1">'Editorial Administrators'</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> + <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</span><span class="o">=</span><span class="s1">'Editorial College'</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> + <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_author</span> + <span class="p">):</span> + <span class="k">raise</span> <span class="n">PermissionDenied</span> <span class="n">other_versions</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> <span class="n">arxiv_identifier_wo_vn_nr</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><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> @@ -1393,6 +1414,12 @@ <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="mi">3</span><span class="p">:</span> <span class="c1"># Reject</span> <span class="n">recommendation</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">'rejected'</span> + <span class="n">previous_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</span><span class="p">(</span> + <span class="n">arxiv_identifier_wo_vn_nr</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">arxiv_identifier_wo_vn_nr</span> + <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="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> + <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">previous_submissions</span><span class="p">:</span> + <span class="n">sub</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">'resubmitted_rejected'</span> + <span class="n">sub</span><span class="o">.</span><span class="n">save</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">save</span><span class="p">()</span> <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">'submission'</span><span class="p">:</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="p">,</span> diff --git a/docs/_build/html/_modules/theses/models.html b/docs/_build/html/_modules/theses/models.html index c63914aa8..343bf2461 100644 --- a/docs/_build/html/_modules/theses/models.html +++ b/docs/_build/html/_modules/theses/models.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="../../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="../../modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 5976ed7ec..03085596e 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -282,12 +284,12 @@ <dt><a href="modules/models.html#scipost.models.NewsItem.descriptor_full">descriptor_full() (scipost.models.NewsItem method)</a> </dt> - </dl></td> - <td style="width: 33%" valign="top"><dl> <dt><a href="modules/models.html#scipost.models.NewsItem.descriptor_small">descriptor_small() (scipost.models.NewsItem method)</a> </dt> + </dl></td> + <td style="width: 33%" valign="top"><dl> <dt><a href="modules/models.html#journals.models.Publication.details">details() (journals.models.Publication method)</a> </dt> @@ -296,6 +298,14 @@ <dt><a href="modules/views.html#scipost.views.documentsSearchResults">documentsSearchResults() (in module scipost.views)</a> </dt> + + <dt><a href="modules/views.html#scipost.views.draft_registration_invitation">draft_registration_invitation() (in module scipost.views)</a> + </dt> + + + <dt><a href="modules/models.html#scipost.models.DraftInvitation">DraftInvitation (class in scipost.models)</a> + </dt> + </dl></td> </tr></table> diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 6ac380fba..c27d7498c 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -34,7 +34,7 @@ href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> <link rel="top" title="SciPost 1.0 documentation" href="#"/> - <link rel="next" title="Models" href="modules/models.html"/> + <link rel="next" title="Production of SciPost Publications" href="howto/production.html"/> <script src="_static/js/modernizr.min.js"></script> @@ -84,8 +84,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -135,8 +137,20 @@ <p>Contents:</p> <div class="toctree-wrapper compound"> <ul> +<li class="toctree-l1"><a class="reference internal" href="howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="dev/maintenance/docs.html">Maintenance of SciPost documentation</a><ul> +<li class="toctree-l2"><a class="reference internal" href="dev/maintenance/docs.html#sphinx-generated-docs">Sphinx-generated docs</a><ul> +<li class="toctree-l3"><a class="reference internal" href="dev/maintenance/docs.html#generating-the-static-html-files">Generating the static html files</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="dev/maintenance/docs.html#sphinxdoc-generated-docs-viewable-online">Sphinxdoc-generated docs (viewable online)</a><ul> +<li class="toctree-l3"><a class="reference internal" href="dev/maintenance/docs.html#updating-the-docs">Updating the docs:</a></li> +</ul> +</li> +</ul> +</li> </ul> </div> </div> @@ -156,7 +170,7 @@ <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="modules/models.html" class="btn btn-neutral float-right" title="Models" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="howto/production.html" class="btn btn-neutral float-right" title="Production of SciPost Publications" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> </div> diff --git a/docs/_build/html/modules/models.html b/docs/_build/html/modules/models.html index 86f0fb265..b07a5315b 100644 --- a/docs/_build/html/modules/models.html +++ b/docs/_build/html/modules/models.html @@ -35,7 +35,7 @@ <link rel="search" title="Search" href="../search.html"/> <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/> <link rel="next" title="Views" href="views.html"/> - <link rel="prev" title="Welcome to SciPost’s documentation!" href="../index.html"/> + <link rel="prev" title="Production of SciPost Publications" href="../howto/production.html"/> <script src="../_static/js/modernizr.min.js"></script> @@ -85,8 +85,10 @@ <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -172,6 +174,12 @@ username, password, email, first_name and last_name are inherited from User.</p> </dd></dl> +<dl class="class"> +<dt id="scipost.models.DraftInvitation"> +<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.html#DraftInvitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.DraftInvitation" title="Permalink to this definition">¶</a></dt> +<dd><p>Draft of an invitation, filled in by an officer.</p> +</dd></dl> + <dl class="class"> <dt id="scipost.models.Graph"> <em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">Graph</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.html#Graph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.Graph" title="Permalink to this definition">¶</a></dt> @@ -384,7 +392,7 @@ to and from Referees and Authors becomes an instance of this class.</p> <a href="views.html" class="btn btn-neutral float-right" title="Views" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="../index.html" class="btn btn-neutral" title="Welcome to SciPost’s documentation!" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="../howto/production.html" class="btn btn-neutral" title="Production of SciPost Publications" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> diff --git a/docs/_build/html/modules/views.html b/docs/_build/html/modules/views.html index 3ca5170a0..2e438cd6a 100644 --- a/docs/_build/html/modules/views.html +++ b/docs/_build/html/modules/views.html @@ -34,6 +34,7 @@ href="../genindex.html"/> <link rel="search" title="Search" href="../search.html"/> <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/> + <link rel="next" title="Maintenance of SciPost documentation" href="../dev/maintenance/docs.html"/> <link rel="prev" title="Models" href="models.html"/> @@ -84,8 +85,10 @@ <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="models.html">Models</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="../dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> @@ -177,6 +180,14 @@ Naive implementation based on exact match of query. NEEDS UPDATING with e.g. Haystack.</p> </dd></dl> +<dl class="function"> +<dt id="scipost.views.draft_registration_invitation"> +<code class="descclassname">scipost.views.</code><code class="descname">draft_registration_invitation</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#draft_registration_invitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.draft_registration_invitation" title="Permalink to this definition">¶</a></dt> +<dd><p>For officers to prefill registration invitations. +This is similar to the registration_invitations method, +which is used to complete the invitation process.</p> +</dd></dl> + <dl class="function"> <dt id="scipost.views.email_group_members"> <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.html#email_group_members"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.email_group_members" title="Permalink to this definition">¶</a></dt> @@ -227,7 +238,7 @@ NEEDS UPDATING with e.g. Haystack.</p> <dl class="function"> <dt id="scipost.views.registration_invitations"> -<code class="descclassname">scipost.views.</code><code class="descname">registration_invitations</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#registration_invitations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.registration_invitations" title="Permalink to this definition">¶</a></dt> +<code class="descclassname">scipost.views.</code><code class="descname">registration_invitations</code><span class="sig-paren">(</span><em>request</em>, <em>draft_id=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#registration_invitations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.registration_invitations" title="Permalink to this definition">¶</a></dt> <dd><p>Overview and tools for administrators</p> </dd></dl> @@ -459,6 +470,8 @@ This is an adapted version of the accept_or_decline_assignment_ack method.</p> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + <a href="../dev/maintenance/docs.html" class="btn btn-neutral float-right" title="Maintenance of SciPost documentation" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="models.html" class="btn btn-neutral" title="Models" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 1bb1e0db757c291c2a48e29f5a9040f46d02b6c2..d59aa123b677371a5d7f4cc5d8b198e3a3148784 100644 GIT binary patch delta 1153 zcmV-{1b+Lc3G4}wdVfoE+cpr#@A?$%v@<=KZmzkxcG^)VX*70{9yt)Olr{zd77y9# zr|*Ifi=vf;T<K&A<p0OzF7`oM+NuH*ghTLoWff?j)%&+}6g6bOW$l5#ZcpXgQ0brB zwX0vUtA%_m&u{y+eIiLMywBd81pSzh*TQ)yG@3_Wpb55!u79%-!qzH2*h{Rf4~chS zTv0~NVD1o}PW!$&^L^L1m(&hQ)Vhcs&8E2fxJ<Y*8X3@<fgJ<jBoZn*jU|Gc1w3Oz zja@urC(ZZdR~wxXnq%%rn%@EK0-R*-Si1B+0!R2)`<o+O#kEE$nrNOU&lLoL6H{}{ z`D`3)&<Aj!Zhs<)9mkq4R>x|d2iZHNJuQ?f#EZQ@&Wn*;IuHR0iJ@^JRXHjk<UFB7 z5a$p{r<%MqrM(ESXB5wsW^vG9z(lH#cie2y(2_zOvTZh~FWB{V?@{_fNC|ZSbrF~Y z*%htXs90+&R8c!?OV1+gghs{kb@v#II(V$iZ%XPO*niyl<N7PeNd<AtaFU~H($R0R zzSRON2H|#VQNoRLV*dw%Rvd&i!QncFX@%_D>bwnMo5;c!L98`QDzPKxofBnPnq60F z7*_r1M7?F`-cwOy$o{5{xeQR9A*Gh&rNf&1IDI6W!19$~!srj<c~(?StbGLauA&ah z0Ngjt)qgdSKWh)%LnYiJL-?@z{R32MXcF^g;{c`(bz@MhYwH3vx0P_g04Kjbf#7Vb z&qnOX|6)y*E$mm|(9Wt2b7zesT`s6}?--@LQ`cB*`UIXUUJDN#olFI|n~zf5JqvOu zhD{aZFqD<Cc{6wb;pFxneAIzujY?&-aD#jzqko18H5Ujer71Kv)-+@_8N$cVyK+Do zwQwB9214;~g!Zj{t{9DiXP)pJ_oZ@_!jYno`lAA=(M%oUj#<V!D(v_l@V!t|_$*Cg z6p0NhWxlbq{3Th1)F4c(dCbc0;F1a8z`)ZbfxgLcp3<bbyKA-u^xbv>C$1~>K6#fj zJAc1Y=kJ!c_t1XNP}7_B364T4oGA1St#8caraOt0Z$T(<Dep8+n}@!`O&@xqnej2= z1neG4pxI*PjB|>Uh76|o;bmzqVD^MC*5=|RI7LajcXA<o1(L!@(3F?u{B(Q`)7Gb= z(F7-bm!NiM_@<3F3I_uHwkw{jdn~nm;(wA#d@gRS*06!pe$by`Rc)>2YN>9yh@p2g zA2W<N(W=zi9T(Ts)IsFW-%NuQE@EeOGy&SuMWuEcCv3s9{zq~o%s<gD^zYG3dXMU~ zb1Q>_-8Ho@dPtKJ`I;tRpZTEP(m{6hCOdV$fn*;JtC=mc2Z<}{kXb)MH=$c>z<RU; zUqaFw5$FW%S6k3B9WJ)^DcI}Uk!h`a2S$v~wYt^e+QIz?Uz+{maPN*Zxa~insX#y$ zY_I**A6x&^f*f_i{Ca=YpXglC`nr9P;{XkBej;>9O2><%Af3`2qL+P1hl_4{IWnwW TYp-hGV6qj>my7=aG+!<Qs?<RK delta 1084 zcmV-C1jGC638x8=dVfuG+cpq}@A?(&v@<=KZLYbgPTEl?X*6~|ju;47N*jX!ix1iA zukV7CEQ(eVa;1|gknclqfqi#LD_7TGqx1-&teplEie~qkj*@}m_o6!pzjdd|O{~q& z-Pp}9#m!8;l$W=Mv0Wx9BSR=&odx}vP&U#B5C-i-5NM+l$$#%>2yx>y9~=}mF2u~c zGEP*<Fqm6}$Mdmo&wM}h-6f5O3XKsdpk0eM9~K!`C95Jj+nYxZIEsXtPGg1OCjl?m zP{R;U*h$kP`PC(FrQu9>AT8ej?E)M%-Jx_5LIRHP@9sB8x=bsBO17(cnY`2xC5}wZ zA?K6zu*ML<gMXeU5_`^UK0A}@X%S@al<u_DTFB@5{x~lNa^*or5DH@(LUK7W5DK2u zGRjMcq|<HQ+R9x8cwmU9+ORliF=8e)r#o&ks6P{-kJ&aEbTI5@vkRz#kV-)lL0<*t zLG4XzGAcF3Ni7=hToqV^tu&}vvEDxh!v{~5<-DTmfq(6tKdioj8fAz>hF2U_n~q_F z&8?AGGYGdEhYIH2%iW&{MspC(Mvto$#~InT)n&JYT_VdMqFfmmWw8V1UtTsF#$4W! zB{5|G(6(Acs4tLGK?%xZLs1ytP>o=PS~6kuhw(g1@&e}`K)<c2J~9AzZE5svGA-<O zUo2RlT7UWnhVXv*$9t$((5BUV?E%KNWJ6GD8s{UGrls`J0w+5@g5+$gPgZUz{&GdW z6n9JT=q6?M)K1|<S4uM8EyIZS>ITL7kib*LD;a>JQ`tWE-A!Kiz=9mDto1MsLpzn) zzWyGhSDQNs$wby{AZH*&(xrwvns!6;G4x^@QGX>PJ%_P|DE>{*y&_K)qt)=l6ZY+6 zsye#|bvC)J+~#7WLD75p*pBIxWt}G<#{YmHg@%^TQQJc+v1aXX-!oQm3{AKuODF@< zriRC?-4?_*&^)4r$7=#Zo02@G%}wsUHVQZt#}S;gsxgEdT~4F=LS4RH+}=U=@j#ES zt$$}Y8p-ESnmLWH?dTdgid1euYVbMl432AGzQfI5Rg#_X=6?ou2Nk`q!^D>494Ge# zO!58m&{V+Wf<Dxi@_BJYMZ0&j5xxK^X%!gC%W8T$zJwVUvT3x7lRpAbxwHJK4L1r0 z0*7rU9-V)vjC<sgDtr>R&KOujE<YG9n15B{oZ)K8w|v5Q2s0nkUvZ+<xwLyOuJzR3 z%3r>jdLvxK)|q4@bk;>yJB|}K5Lo|^I1!c~=@*7~Xh*&F?6p&!VGXwH$U@Yw=?w!+ zar3G;jJB5-i+ngcUPeuAzNmM_7ci7;P()YUD_l~g{52GZ-nU)EpJsH^Gk0osH#LV7 z9qN5I@9v(b58J=_nJ{E29nVf4_?+e#iQ;oUob5Y-lZka>-Bn%lUM#6soBa<c;<SR8 CKM9Ti diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html index 4b2fea650..db94055e4 100644 --- a/docs/_build/html/py-modindex.html +++ b/docs/_build/html/py-modindex.html @@ -86,8 +86,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 7c63216f4..cca61f696 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -83,8 +83,10 @@ <ul> +<li class="toctree-l1"><a class="reference internal" href="howto/production.html">Production of SciPost Publications</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/models.html">Models</a></li> <li class="toctree-l1"><a class="reference internal" href="modules/views.html">Views</a></li> +<li class="toctree-l1"><a class="reference internal" href="dev/maintenance/docs.html">Maintenance of SciPost documentation</a></li> </ul> diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index d8cbf55fd..c602a340e 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:50,filenames:["index","modules/models","modules/views"],objects:{"commentaries.models":{Commentary:[1,1,1,""]},"commentaries.models.Commentary":{parse_links_into_urls:[1,2,1,""],scipost_url:[1,2,1,""],scipost_url_full:[1,2,1,""]},"commentaries.views":{prefill_using_DOI:[2,3,1,""],prefill_using_identifier:[2,3,1,""]},"comments.models":{Comment:[1,1,1,""]},"journals.models":{Deposit:[1,1,1,""],Issue:[1,1,1,""],Journal:[1,1,1,""],Publication:[1,1,1,""],UnregisteredAuthor:[1,1,1,""],Volume:[1,1,1,""]},"journals.models.Publication":{details:[1,2,1,""]},"journals.views":{add_author:[2,3,1,""],create_citation_list_metadata:[2,3,1,""],create_funding_info_metadata:[2,3,1,""],create_metadata_xml:[2,3,1,""],initiate_publication:[2,3,1,""],metadata_xml_deposit:[2,3,1,""],scipost_physics_accepted:[2,3,1,""],scipost_physics_recent:[2,3,1,""],upload_proofs:[2,3,1,""],validate_publication:[2,3,1,""]},"scipost.models":{AffiliationObject:[1,1,1,""],Arc:[1,1,1,""],AuthorshipClaim:[1,1,1,""],ChoiceArrayField:[1,1,1,""],Contributor:[1,1,1,""],Graph:[1,1,1,""],List:[1,1,1,""],NewsItem:[1,1,1,""],Node:[1,1,1,""],PrecookedEmail:[1,1,1,""],RegistrationInvitation:[1,1,1,""],Remark:[1,1,1,""],SPBMembershipAgreement:[1,1,1,""],SupportingPartner:[1,1,1,""],Team:[1,1,1,""],UnavailabilityPeriod:[1,1,1,""]},"scipost.models.Contributor":{public_info_as_table:[1,2,1,""]},"scipost.models.NewsItem":{descriptor_full:[1,2,1,""],descriptor_small:[1,2,1,""]},"scipost.views":{activation:[2,3,1,""],api_graph:[2,3,1,""],base:[2,3,1,""],claim_authorships:[2,3,1,""],contributor_info:[2,3,1,""],documentsSearchResults:[2,3,1,""],email_group_members:[2,3,1,""],email_particular:[2,3,1,""],get_query:[2,3,1,""],index:[2,3,1,""],invitation:[2,3,1,""],mark_reg_inv_as_declined:[2,3,1,""],normalize_query:[2,3,1,""],personal_page:[2,3,1,""],registration_invitations:[2,3,1,""],registration_invitations_cleanup:[2,3,1,""],remove_registration_invitation:[2,3,1,""],renew_registration_invitation:[2,3,1,""],search:[2,3,1,""],send_precooked_email:[2,3,1,""]},"submissions.models":{EICRecommendation:[1,1,1,""],EditorialAssignment:[1,1,1,""],EditorialCommunication:[1,1,1,""],RefereeInvitation:[1,1,1,""],Report:[1,1,1,""],Submission:[1,1,1,""]},"submissions.models.EditorialAssignment":{header_as_li:[1,2,1,""]},"submissions.views":{assignment_failed:[2,3,1,""],cancel_ref_invitation:[2,3,1,""],close_refereeing_round:[2,3,1,""],communication:[2,3,1,""],editorial_workflow:[2,3,1,""],fix_College_decision:[2,3,1,""],pool:[2,3,1,""],recruit_referee:[2,3,1,""],ref_invitation_reminder:[2,3,1,""],send_refereeing_invitation:[2,3,1,""],submissions:[2,3,1,""],volunteer_as_EIC:[2,3,1,""]},"theses.models":{ThesisLink:[1,1,1,""]},commentaries:{models:[1,0,0,"-"],views:[2,0,0,"-"]},comments:{models:[1,0,0,"-"],views:[2,0,0,"-"]},journals:{models:[1,0,0,"-"],views:[2,0,0,"-"]},scipost:{models:[1,0,0,"-"],views:[2,0,0,"-"]},submissions:{models:[1,0,0,"-"],views:[2,0,0,"-"]},theses:{models:[1,0,0,"-"],views:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"abstract":1,"case":2,"class":1,"function":2,"import":2,"new":1,"public":[1,2],"return":[1,2],"true":2,"while":2,_sre:2,abov:[1,2],accept:[1,2],accept_or_decline_assignment_ack:2,acceptance_d:1,accepted_submiss:1,access:[1,2],accessibl:1,account:2,action:2,activ:2,adapt:2,add_author:2,address:2,adjust:1,admin:1,administr:2,affiliationobject:1,after:2,agreement:1,all:[1,2],allow:[1,2],among:2,ani:2,anoth:2,answer:2,api:2,api_graph:2,appear:2,arc:1,arg:1,arrai:1,arrayfield:1,arrow:1,arxiv:[1,2],arxiv_identifier_w_vn_nr:[1,2],arxiv_identifier_wo_vn_nr:1,arxiv_link:1,arxiv_vn_nr:1,ask:2,assignment_fail:2,associ:2,author:[1,2],author_com:1,author_list:1,authorship:2,authorshipclaim:1,auto:2,automat:2,base:2,base_field:1,becom:[1,2],been:2,befor:2,below:2,between:[1,2],bibtex_entri:1,blurb:1,board:1,both:1,built:2,bulk:2,call:[1,2],can:[1,2],cancel:1,cancel_ref_invit:2,charg:[1,2],choic:1,choicearrayfield:1,citation_list:2,citedbi:1,claim:2,claim_authorship:2,claimant:1,click:2,close_refereeing_round:2,collabor:1,collect:1,colleg:2,combin:2,comment:[1,2],commentari:[1,2],commun:[1,2],compar:2,complet:1,compos:1,comtyp:2,confirm:2,contact:2,contain:[1,2],content:[0,1,2],context:2,contribut:[1,2],contributor:[1,2],contributor_id:2,contributor_info:2,countri:1,creat:[1,2],create_citation_list_metadata:2,create_funding_info_metadata:2,create_metadata_xml:2,crossref:[1,2],current:1,data:2,databas:2,date:1,date_answ:1,date_cr:1,date_invit:1,date_last_remind:1,date_respond:1,date_submit:1,declin:2,defin:1,deni:2,deposit:[1,2],deprec:1,descriptor_ful:1,descriptor_smal:1,desir:2,detail:[1,2],detect:2,determin:1,dictionari:2,digest:2,direct:1,disciplin:1,displai:2,django:1,documentssearchresult:2,doe:2,doi:[1,2],doi_label:1,doi_str:[1,2],domain:1,dure:2,each:1,earlier:1,edadmin:2,edit:1,editor:[1,2],editor_in_charg:1,editori:[1,2],editorial_pag:2,editorial_workflow:2,editorialassign:1,editorialcommun:1,eic:2,eicrecommend:1,email:[1,2],email_address:1,email_group_memb:2,email_particular:2,enabl:1,end:1,entri:2,etc:1,exact:2,explor:1,fellow:2,field:[1,2],fill:2,find:2,findal:2,findterm:2,first_author:1,first_author_unregist:1,first_nam:1,fix_college_decis:2,flag:2,followup_link:1,followup_link_text:1,foreignkei:1,form:2,format:1,formfield:1,formul:2,from:[1,2],fulfil:1,funding_info:2,further:[1,2],gather:2,get_queri:2,given:1,global:2,graph:[1,2],graph_id:2,group:2,handl:2,hasn:2,have:2,haystack:2,header:2,header_as_li:1,headlin:1,here:1,histori:1,html:[1,2],identifi:2,implement:2,in_issu:1,in_journ:1,in_volum:1,index:[0,1,2],individu:[1,2],info:1,inherit:[1,2],initiate_publ:2,instanc:[1,2],instead:2,institut:1,invit:[1,2],invitat:1,invitation_id:2,invitation_kei:1,invited_bi:1,is_curr:1,is_resubmiss:1,isn:2,issn:1,issue:1,journal:[1,2],json:2,keep:2,kei:2,keyword:2,kwarg:1,last_nam:1,latest_act:1,length:1,link:[1,2],list:[1,2],list_of_chang:1,log:2,made:1,main:2,make:2,manuscript:2,mark:2,mark_reg_inv_as_declin:2,match:2,member:2,membership:1,metadata:[1,2],metadata_xml:[1,2],metadata_xml_deposit:2,method:[1,2],model:[],modul:[0,2],most:2,multiplechoicefield:1,must:2,naiv:2,name:[1,2],navbar:2,needs:2,newsitem:1,node:1,none:[1,2],normalize_queri:2,normspac:2,note:1,nr_remind:1,number:[1,2],object:[1,2],occur:2,off:2,once:2,onli:1,open_for_com:1,open_for_report:1,option:2,otherwis:2,out:1,overlap:2,overview:2,page:[0,1,2],paper:2,paper_nr:1,parse_links_into_url:1,particular:1,partner:1,password:1,path:1,pdf:2,pdf_file:1,pend:2,permiss:1,person:[1,2],personal_pag:2,perus:2,physic:2,plain:1,plot:2,point:1,pool:2,popul:2,postgr:1,potenti:2,pre:2,precook:2,precookedemail:1,prefil:2,prefill_using_doi:2,prefill_using_identifi:2,print:1,privat:1,probe:2,process:2,produc:2,product:2,proof:2,provid:[1,2],public_info_as_t:1,publication_d:1,publication_detail:1,publication_id:2,publicli:1,publish:2,python:2,queri:2,query_str:2,quot:2,read:1,rec_id:2,recent:2,recogn:2,recommend:[1,2],recruit_refere:2,ref_invitation_remind:2,refere:[1,2],referee_id:2,refereeinvit:1,referees_flag:1,referees_suggest:1,refusal_reason:1,regist:2,registr:[1,2],registration_invit:2,registration_invitations_cleanup:2,registrationinvit:1,reject:2,relev:2,remark:1,remarks_for_author:1,remarks_for_editor:1,remarks_for_editorial_colleg:1,remov:2,remove_registration_invit:2,renew:[1,2],renew_registration_invit:2,repli:[1,2],report:[1,2],reporting_deadlin:1,repres:1,request:2,requested_chang:1,right:1,round:2,same:1,satisfactori:2,scipost_physics_accept:2,scipost_physics_rec:2,scipost_url:1,scipost_url_ful:1,search:[0,2],search_field:2,secondary_area:1,see:[1,2],select:2,send:2,send_precooked_email:[1,2],send_refereeing_invit:2,sent:2,server:2,set:1,she:2,size:1,skeleton:2,somebodi:2,sourc:[1,2],spbmembershipagr:1,split:2,sre_pattern:2,start:1,start_dat:1,statu:1,store:1,string:2,sub:[1,2],subject:2,subject_area:1,submiss:[1,2],submission_d:1,submission_typ:1,submit:1,submitted_bi:1,submitted_to_journ:1,subunit:1,summari:2,support:1,supportingpartn:1,system:2,take:[1,2],team:[1,2],teams_with_access:1,templat:[1,2],termin:2,test:2,thei:2,them:2,thesi:1,thesislink:[1,2],thi:[1,2],those:2,through:2,thu:1,time:1,titl:1,to_journ:2,todo:2,togeth:2,token:2,tool:2,turn:1,two:1,type:1,unavailabilityperiod:1,undergo:2,unregist:2,unregistered_author_id:2,unregisteredauthor:1,unsollicit:1,until_d:1,updating:2,upload:2,upload_proof:2,upon:2,url:1,use:1,user:[1,2],usernam:1,validate_publ:2,validatepublicationform:2,verif:2,version:[1,2],vetted_bi:1,view:[],volum:1,volunt:2,volunteer_as_eic:2,vote:2,voting_deadlin:1,want:2,well:2,when:2,where:2,which:2,who:2,without:1,word:2,yet:2},titles:["Welcome to SciPost’s documentation!","Models","Views"],titleterms:{document:0,indice:0,model:1,scipost:0,tabl:0,view:2,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:50,filenames:["dev/maintenance/docs","howto/production","index","modules/models","modules/views"],objects:{"commentaries.models":{Commentary:[3,1,1,""]},"commentaries.models.Commentary":{parse_links_into_urls:[3,2,1,""],scipost_url:[3,2,1,""],scipost_url_full:[3,2,1,""]},"commentaries.views":{prefill_using_DOI:[4,3,1,""],prefill_using_identifier:[4,3,1,""]},"comments.models":{Comment:[3,1,1,""]},"journals.models":{Deposit:[3,1,1,""],Issue:[3,1,1,""],Journal:[3,1,1,""],Publication:[3,1,1,""],UnregisteredAuthor:[3,1,1,""],Volume:[3,1,1,""]},"journals.models.Publication":{details:[3,2,1,""]},"journals.views":{add_author:[4,3,1,""],create_citation_list_metadata:[4,3,1,""],create_funding_info_metadata:[4,3,1,""],create_metadata_xml:[4,3,1,""],initiate_publication:[4,3,1,""],metadata_xml_deposit:[4,3,1,""],scipost_physics_accepted:[4,3,1,""],scipost_physics_recent:[4,3,1,""],upload_proofs:[4,3,1,""],validate_publication:[4,3,1,""]},"scipost.models":{AffiliationObject:[3,1,1,""],Arc:[3,1,1,""],AuthorshipClaim:[3,1,1,""],ChoiceArrayField:[3,1,1,""],Contributor:[3,1,1,""],DraftInvitation:[3,1,1,""],Graph:[3,1,1,""],List:[3,1,1,""],NewsItem:[3,1,1,""],Node:[3,1,1,""],PrecookedEmail:[3,1,1,""],RegistrationInvitation:[3,1,1,""],Remark:[3,1,1,""],SPBMembershipAgreement:[3,1,1,""],SupportingPartner:[3,1,1,""],Team:[3,1,1,""],UnavailabilityPeriod:[3,1,1,""]},"scipost.models.Contributor":{public_info_as_table:[3,2,1,""]},"scipost.models.NewsItem":{descriptor_full:[3,2,1,""],descriptor_small:[3,2,1,""]},"scipost.views":{activation:[4,3,1,""],api_graph:[4,3,1,""],base:[4,3,1,""],claim_authorships:[4,3,1,""],contributor_info:[4,3,1,""],documentsSearchResults:[4,3,1,""],draft_registration_invitation:[4,3,1,""],email_group_members:[4,3,1,""],email_particular:[4,3,1,""],get_query:[4,3,1,""],index:[4,3,1,""],invitation:[4,3,1,""],mark_reg_inv_as_declined:[4,3,1,""],normalize_query:[4,3,1,""],personal_page:[4,3,1,""],registration_invitations:[4,3,1,""],registration_invitations_cleanup:[4,3,1,""],remove_registration_invitation:[4,3,1,""],renew_registration_invitation:[4,3,1,""],search:[4,3,1,""],send_precooked_email:[4,3,1,""]},"submissions.models":{EICRecommendation:[3,1,1,""],EditorialAssignment:[3,1,1,""],EditorialCommunication:[3,1,1,""],RefereeInvitation:[3,1,1,""],Report:[3,1,1,""],Submission:[3,1,1,""]},"submissions.models.EditorialAssignment":{header_as_li:[3,2,1,""]},"submissions.views":{assignment_failed:[4,3,1,""],cancel_ref_invitation:[4,3,1,""],close_refereeing_round:[4,3,1,""],communication:[4,3,1,""],editorial_workflow:[4,3,1,""],fix_College_decision:[4,3,1,""],pool:[4,3,1,""],recruit_referee:[4,3,1,""],ref_invitation_reminder:[4,3,1,""],send_refereeing_invitation:[4,3,1,""],submissions:[4,3,1,""],volunteer_as_EIC:[4,3,1,""]},"theses.models":{ThesisLink:[3,1,1,""]},commentaries:{models:[3,0,0,"-"],views:[4,0,0,"-"]},comments:{models:[3,0,0,"-"],views:[4,0,0,"-"]},journals:{models:[3,0,0,"-"],views:[4,0,0,"-"]},scipost:{models:[3,0,0,"-"],views:[4,0,0,"-"]},submissions:{models:[3,0,0,"-"],views:[4,0,0,"-"]},theses:{models:[3,0,0,"-"],views:[4,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"abstract":3,"case":4,"class":3,"function":4,"import":4,"new":3,"public":[],"return":[3,4],"true":4,"while":4,_sre:4,abov:[3,4],accept:[1,3,4],accept_or_decline_assignment_ack:4,acceptance_d:3,accepted_submiss:3,access:[3,4],accessibl:3,account:4,action:4,activ:4,adapt:4,add_author:4,address:4,adjust:3,admin:3,administr:[1,4],affiliationobject:3,after:4,agreement:3,all:[3,4],allow:[3,4],among:4,ani:4,anoth:4,answer:4,api:4,api_graph:4,appear:4,arc:3,arg:3,arrai:3,arrayfield:3,arrow:3,arxiv:[3,4],arxiv_identifier_w_vn_nr:[3,4],arxiv_identifier_wo_vn_nr:3,arxiv_link:3,arxiv_vn_nr:3,ask:4,assignment_fail:4,associ:4,author:[3,4],author_com:3,author_list:3,authorship:4,authorshipclaim:3,auto:4,automat:4,base:4,base_field:3,becom:[3,4],been:4,befor:4,below:4,between:[3,4],bibtex_entri:3,blurb:3,board:3,both:3,built:4,bulk:4,call:[3,4],can:[3,4],cancel:3,cancel_ref_invit:4,charg:[3,4],choic:3,choicearrayfield:3,citation_list:4,citedbi:3,claim:4,claim_authorship:4,claimant:3,click:4,close_refereeing_round:4,collabor:3,collect:3,colleg:4,combin:4,command:0,comment:[3,4],commentari:[3,4],commun:[3,4],compar:4,complet:[3,4],compos:3,comtyp:4,confirm:4,contact:4,contain:[3,4],content:[2,3,4],context:4,contribut:[3,4],contributor:[3,4],contributor_id:4,contributor_info:4,countri:3,creat:[3,4],create_citation_list_metadata:4,create_funding_info_metadata:4,create_metadata_xml:4,crossref:[3,4],current:3,data:4,databas:4,date:3,date_answ:3,date_cr:3,date_invit:3,date_last_remind:3,date_respond:3,date_submit:3,declin:4,defin:3,deni:4,deposit:[3,4],deprec:3,describ:1,descriptor_ful:3,descriptor_smal:3,desir:4,detail:[3,4],detect:4,determin:3,dictionari:4,digest:4,direct:3,disciplin:3,displai:4,django:3,documentssearchresult:4,doe:4,doi:[3,4],doi_label:3,doi_str:[3,4],domain:3,draft:3,draft_id:4,draft_registration_invit:4,draftinvit:3,dure:4,each:3,earlier:3,edadmin:4,edit:3,editor:[3,4],editor_in_charg:3,editori:[1,3,4],editorial_pag:4,editorial_workflow:4,editorialassign:3,editorialcommun:3,eic:4,eicrecommend:3,email:[3,4],email_address:3,email_group_memb:4,email_particular:4,enabl:3,end:3,entri:4,etc:3,exact:4,explor:3,fellow:4,field:[3,4],fill:[3,4],find:4,findal:4,findterm:4,first_author:3,first_author_unregist:3,first_nam:3,fix_college_decis:4,flag:4,folder:0,followup_link:3,followup_link_text:3,foreignkei:3,form:4,format:3,formfield:3,formul:4,from:[1,3,4],fulfil:3,funding_info:4,further:[3,4],gather:4,get_queri:4,given:3,global:4,graph:[3,4],graph_id:4,group:4,guid:1,handl:4,hasn:4,have:4,haystack:4,header:4,header_as_li:3,headlin:3,here:3,histori:3,html:[],identifi:4,implement:4,in_issu:3,in_journ:3,in_volum:3,index:[2,3,4],individu:[3,4],info:3,inherit:[3,4],initiate_publ:4,instanc:[3,4],instead:4,institut:3,invit:[3,4],invitat:3,invitation_id:4,invitation_kei:3,invited_bi:3,invok:0,is_curr:3,is_resubmiss:3,isn:4,issn:3,issue:3,journal:[3,4],json:4,keep:4,kei:4,keyword:4,kwarg:3,last_nam:3,latest_act:3,length:3,link:[3,4],list:[3,4],list_of_chang:3,log:4,made:3,main:4,make:[0,4],manag:0,manuscript:4,mark:4,mark_reg_inv_as_declin:4,match:4,meant:1,member:4,membership:3,metadata:[3,4],metadata_xml:[3,4],metadata_xml_deposit:4,method:[3,4],model:[],modul:[2,4],most:4,multiplechoicefield:3,must:4,naiv:4,name:[3,4],navbar:4,needs:4,newsitem:3,node:3,none:[3,4],normalize_queri:4,normspac:4,note:3,nr_remind:3,number:[3,4],object:[3,4],occur:4,off:4,offic:[3,4],officer:1,once:4,onli:3,open_for_com:3,open_for_report:3,option:4,otherwis:4,out:3,overlap:4,overview:4,page:[2,3,4],paper:[1,4],paper_nr:3,parse_links_into_url:3,particular:3,partner:3,password:3,path:3,pdf:4,pdf_file:3,pend:4,permiss:3,person:[3,4],personal_pag:4,perus:4,physic:4,plain:3,plot:4,point:3,pool:4,popul:4,post:1,postgr:3,potenti:4,pre:4,precook:4,precookedemail:3,prefil:4,prefill_using_doi:4,prefill_using_identifi:4,print:3,privat:3,probe:4,process:4,produc:4,product:[],project:0,proof:4,provid:[3,4],public_info_as_t:3,publication_d:3,publication_detail:3,publication_id:4,publicli:3,publish:4,python:[0,4],queri:4,query_str:4,quot:4,read:3,rec_id:4,recent:4,recogn:4,recommend:[3,4],recruit_refere:4,ref_invitation_remind:4,refere:[3,4],referee_id:4,refereeinvit:3,referees_flag:3,referees_suggest:3,refusal_reason:3,regist:4,registr:[3,4],registration_invit:4,registration_invitations_cleanup:4,registrationinvit:3,reject:4,relev:4,remark:3,remarks_for_author:3,remarks_for_editor:3,remarks_for_editorial_colleg:3,remov:4,remove_registration_invit:4,renew:[3,4],renew_registration_invit:4,repli:[3,4],report:[3,4],reporting_deadlin:3,repres:3,request:4,requested_chang:3,right:3,round:4,same:3,satisfactori:4,scipost_physics_accept:4,scipost_physics_rec:4,scipost_url:3,scipost_url_ful:3,search:[2,4],search_field:4,secondary_area:3,see:[3,4],select:4,send:4,send_precooked_email:[3,4],send_refereeing_invit:4,sent:4,server:4,set:3,she:4,similar:4,size:3,skeleton:4,slug:0,somebodi:4,sourc:[3,4],spbmembershipagr:3,split:4,sre_pattern:4,start:3,start_dat:3,statu:3,store:3,string:4,sub:[3,4],subject:4,subject_area:3,submiss:[3,4],submission_d:3,submission_typ:3,submit:3,submitted_bi:3,submitted_to_journ:3,subunit:3,summari:4,support:3,supportingpartn:3,system:4,take:[3,4],team:[3,4],teams_with_access:3,templat:[3,4],termin:4,test:4,thei:4,them:4,thesi:3,thesislink:[3,4],thi:[1,3,4],those:4,through:4,thu:3,time:3,titl:3,to_journ:4,todo:4,togeth:4,token:4,tool:4,turn:3,two:3,type:3,unavailabilityperiod:3,undergo:4,unregist:4,unregistered_author_id:4,unregisteredauthor:3,unsollicit:3,until_d:3,updatedoc:0,updating:4,upload:4,upload_proof:4,upon:4,url:3,use:[0,3],user:[3,4],usernam:3,validate_publ:4,validatepublicationform:4,verif:4,version:[3,4],vetted_bi:3,view:[],volum:3,volunt:4,volunteer_as_eic:4,vote:4,voting_deadlin:3,want:4,well:4,when:4,where:4,which:4,who:4,without:3,word:4,workflow:1,yet:4},titles:["Maintenance of SciPost documentation","Production of SciPost Publications","Welcome to SciPost’s documentation!","Models","Views"],titleterms:{"public":1,"static":0,doc:0,document:[0,2],file:0,gener:0,html:0,indice:2,mainten:0,model:3,onlin:0,product:1,scipost:[0,1,2],sphinx:0,sphinxdoc:0,tabl:2,update:0,view:4,viewabl:0,welcom:2}}) \ No newline at end of file diff --git a/docs/contributors/contributors.rst b/docs/contributors/contributors.rst new file mode 100644 index 000000000..c732f35bf --- /dev/null +++ b/docs/contributors/contributors.rst @@ -0,0 +1,8 @@ +For Contributors +================ + + +.. toctree:: + :maxdepth: 2 + + editorial_administrators/editorial_administrators diff --git a/docs/contributors/editorial_administrators/#production.rst# b/docs/contributors/editorial_administrators/#production.rst# new file mode 100644 index 000000000..be80d8e9e --- /dev/null +++ b/docs/contributors/editorial_administrators/#production.rst# @@ -0,0 +1,8 @@ +.. Howto for publication production + +Production of SciPost Publications +================================== + +This guide is meant for **Editorial Administrators** and **Production Officers**. It describes the post-acceptance workflow from paper acceptance to publication. + + diff --git a/docs/contributors/editorial_administrators/.#production.rst b/docs/contributors/editorial_administrators/.#production.rst new file mode 120000 index 000000000..056404ec5 --- /dev/null +++ b/docs/contributors/editorial_administrators/.#production.rst @@ -0,0 +1 @@ +jscaux@MacBook-Pro-7.local.2955 \ No newline at end of file diff --git a/docs/contributors/editorial_administrators/editorial_administrators.rst b/docs/contributors/editorial_administrators/editorial_administrators.rst new file mode 100644 index 000000000..03174bbbd --- /dev/null +++ b/docs/contributors/editorial_administrators/editorial_administrators.rst @@ -0,0 +1,8 @@ +Editorial Administrators +======================== + + +.. toctree:: + :maxdepth: 2 + + production diff --git a/docs/contributors/editorial_administrators/production.rst b/docs/contributors/editorial_administrators/production.rst new file mode 100644 index 000000000..9dfdf28a3 --- /dev/null +++ b/docs/contributors/editorial_administrators/production.rst @@ -0,0 +1,6 @@ +.. Howto for publication production + +Production of SciPost Publications +================================== + +This guide is meant for **Editorial Administrators** and **Production Officers**. It describes the post-acceptance workflow from paper acceptance to publication. diff --git a/docs/developers/codebase/codebase.rst b/docs/developers/codebase/codebase.rst new file mode 100644 index 000000000..936a62247 --- /dev/null +++ b/docs/developers/codebase/codebase.rst @@ -0,0 +1,9 @@ +SciPost codebase +================ + + +.. toctree:: + :maxdepth: 2 + + modules/models + modules/views diff --git a/docs/modules/models.rst b/docs/developers/codebase/modules/models.rst similarity index 100% rename from docs/modules/models.rst rename to docs/developers/codebase/modules/models.rst diff --git a/docs/modules/views.rst b/docs/developers/codebase/modules/views.rst similarity index 100% rename from docs/modules/views.rst rename to docs/developers/codebase/modules/views.rst diff --git a/docs/developers/developers.rst b/docs/developers/developers.rst new file mode 100644 index 000000000..557c2eaf7 --- /dev/null +++ b/docs/developers/developers.rst @@ -0,0 +1,9 @@ +For Developers +============== + + +.. toctree:: + :maxdepth: 2 + + maintenance/maintenance + codebase/codebase diff --git a/docs/developers/maintenance/docs.rst b/docs/developers/maintenance/docs.rst new file mode 100644 index 000000000..784ada575 --- /dev/null +++ b/docs/developers/maintenance/docs.rst @@ -0,0 +1,22 @@ +Maintenance of SciPost documentation +==================================== + + +Sphinx-generated docs +--------------------- + + +Generating the static html files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the docs folder, invoke ``make html``. + + + +Sphinxdoc-generated docs (viewable online) +------------------------------------------ + +Updating the docs: +~~~~~~~~~~~~~~~~~~ + +Use the management command ``python manage.py updatedoc -b <project-slug>`` with slug scipost. diff --git a/docs/developers/maintenance/maintenance.rst b/docs/developers/maintenance/maintenance.rst new file mode 100644 index 000000000..3122094aa --- /dev/null +++ b/docs/developers/maintenance/maintenance.rst @@ -0,0 +1,8 @@ +Maintenance +=========== + + +.. toctree:: + :maxdepth: 2 + + docs diff --git a/docs/index.rst b/docs/index.rst index 1fae5f89b..5b4a14377 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,10 +9,10 @@ Welcome to SciPost's documentation! Contents: .. toctree:: - :maxdepth: 2 + :maxdepth: 3 - modules/models - modules/views + contributors/contributors + developers/developers Indices and tables diff --git a/scipost/templates/scipost/howto.html b/scipost/templates/scipost/howto.html new file mode 100644 index 000000000..f01dfda26 --- /dev/null +++ b/scipost/templates/scipost/howto.html @@ -0,0 +1,25 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Howto Guides{% endblock pagetitle %} + +{% block bodysup %} + +{% load scipost_extras %} + + +<section> + <h1>SciPost Howto Guides</h1> + + <ul> + <li> + Post-acceptance: + <ul> + <li><a href="{% url 'scipost:howto_production' %}">production</a></li> + </ul> + </li> + </ul> + +</section> + + +{% endblock bodysup %} diff --git a/scipost/templates/scipost/howto_production.html b/scipost/templates/scipost/howto_production.html new file mode 100644 index 000000000..d5fe13f22 --- /dev/null +++ b/scipost/templates/scipost/howto_production.html @@ -0,0 +1,135 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Howto: Production{% endblock pagetitle %} + +{% block bodysup %} + +{% load scipost_extras %} + + +<section> + <h1>SciPost Publications: Production</h1> + <ul><li>Go back to the <a href="{% url 'scipost:howto' %}">Howto Guides</a> Page</li></ul> + + <p>This guide is meant for <strong>Editorial Administrators</strong> and <strong>Production Officers</strong>. It describes the post-acceptance workflow from paper acceptance to publication.</p> + + <p>Version: 2016-12-16</p> + + <hr class="hr12"/> + + <ol> + <li> + <h3>Preparation</h3> + <ol> + <li> + <p>Check the Submission's list of references: if the syle isn’t right (most importantly: DOI missing), ask authors to provide an updated <code>bibliography</code> or <code>.bbl</code> file by email.</p> + </li> + </ol> + </li><!-- Preparation --> + + <li> + <h3>Source retrieval and folder preparation</h3> + + <ol> + <li> + <p>On the SciPost server, navigate to folder <code>[Journal full name]/IN PRODUCTION</code>.</p> + </li> + <li> + <p>Create a folder <code>[journal abbrev. name]_[arxiv identifier]_[first author last name]</code>, e.g. <code>SciPost_Phys_1604.98141v3_Smart</code>.</p> + </li> + <li> + <p>Save the source from arXiv into this folder.</p> + </li> + <li> + <p>NOTE: the file will be named <code>####.#####v#</code>, which is not recognized as a <code>.tar.gz</code> file on a UNIX system.</p> + <p>Rename the file <code>####.####v#.tar.gz</code>. Unzipping it produces the folder <code>####.#####v#</code>.</p> + </li> + <li> + <p>Copy the files in <code>[Journal full name]/v##_production/FILES_TO_COPY_IN_PAPER_DIR</code> to the paper-in-production’s folder. There are 4 files: <code>by.eps, logo_scipost_with_bgd.pdf, SciPost_bibstyle.bst, SciPost.cls</code>.</p> + </p> + </li> + <li> + <p>Copy all the paper’s sources one level down (so from <code>####.#####v#</code> to the current directory).</p> + </li> + <li> + <p>Copy the <code>.tex</code> source to a new file using the name convention <code>[Journal abbrev. name]_####_#####v#_[first author last name].tex</code> (careful: use underscore instead of . between numbers).</p> + </li> + </ol> + + </li><!-- Source retrieval --> + + <li> + <h3>LaTeX file preparation</h3> + + + <ol> + <li> + <h4>Handling references</h4> + </li> + + <li> + <h4>Implementing the SciPost style</h4> + <ol> + <li> + <pre><code> +%%%%%%%% Begin SciPost Production addition + +\usepackage[bitstream-charter]{mathdesign} + +\hypersetup{ +colorlinks, +linkcolor={red!50!black}, +citecolor={blue!50!black}, +urlcolor={blue!80!black} +} + +\urlstyle{sf} + +\fancypagestyle{SPtitlepage}{% +\fancyhf{} +\fancyfoot[C]{\textbf{\thepage}} +\lhead{\raisebox{-1.5mm}[0pt][0pt]{\href{https://scipost.org}{\includegraphics[width=20mm]{logo_scipost_with_bgd.pdf}}}} +\chead{} +\rhead{\small \href{https://scipost.org/SciPostPhys.1.1.???}{SciPost Phys. 1, ??? (2016)}} +\renewcommand{\headrulewidth}{1pt} +} + +\fancypagestyle{SPbulk}{ +\fancyhf{} +\lhead{\raisebox{-1.5mm}[0pt][0pt]{\href{https://scipost.org}{\includegraphics[width=20mm]{logo_scipost_with_bgd.pdf}}}} +\rhead{\small \href{https://scipost.org/SciPostPhys.1.1.???}{SciPost Phys. 1, ??? (2016)}} +\fancyfoot[C]{\textbf{\thepage}} +\renewcommand{\headrulewidth}{1pt} +} + +%%%%%%%% End SciPost Production addition + </code></pre> + </li> + </ol> + </li> + </ol> + </li><!-- Implementing the SciPost style --> + + <li> + <h3>References validation</h3> + </li><!-- References validation --> + + <li> + <h3>Proofs</h3> + </li><!-- Proofs --> + + <li> + <h3>Online publication</h3> + </li><!-- Online publication --> + + <li> + <h3>Metadata preparation and DOI registration with Crossref</h3> + </li><!-- Metadata, DOI --> + + </ol> + + +</section> + + +{% endblock bodysup %} -- GitLab