From a37d09aefb1e8f69b247deb2a368fd472c6869f4 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Thu, 4 Jan 2018 12:28:50 -0500 Subject: [PATCH 01/12] Move PluginManager out of api folder --- common/lib/xmodule/xmodule/tabs.py | 2 +- .../djangoapps/content/block_structure/transformer_registry.py | 2 +- openedx/core/lib/course_tabs.py | 2 +- openedx/core/lib/{api => }/plugins.py | 0 openedx/core/lib/tests/test_course_tab_api.py | 2 +- openedx/features/course_experience/course_tools.py | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename openedx/core/lib/{api => }/plugins.py (100%) diff --git a/common/lib/xmodule/xmodule/tabs.py b/common/lib/xmodule/xmodule/tabs.py index ab16903470..e634bae879 100644 --- a/common/lib/xmodule/xmodule/tabs.py +++ b/common/lib/xmodule/xmodule/tabs.py @@ -8,7 +8,7 @@ from django.core.files.storage import get_storage_class from six import text_type from xblock.fields import List -from openedx.core.lib.api.plugins import PluginError +from openedx.core.lib.plugins import PluginError log = logging.getLogger("edx.courseware") diff --git a/openedx/core/djangoapps/content/block_structure/transformer_registry.py b/openedx/core/djangoapps/content/block_structure/transformer_registry.py index 9c7b141f2c..2a57d64c9b 100644 --- a/openedx/core/djangoapps/content/block_structure/transformer_registry.py +++ b/openedx/core/djangoapps/content/block_structure/transformer_registry.py @@ -5,7 +5,7 @@ PluginManager. from base64 import b64encode from hashlib import sha1 -from openedx.core.lib.api.plugins import PluginManager +from openedx.core.lib.plugins import PluginManager from openedx.core.lib.cache_utils import memoized diff --git a/openedx/core/lib/course_tabs.py b/openedx/core/lib/course_tabs.py index 4ce547c8fc..56d4ef1f2e 100644 --- a/openedx/core/lib/course_tabs.py +++ b/openedx/core/lib/course_tabs.py @@ -1,7 +1,7 @@ """ Tabs for courseware. """ -from openedx.core.lib.api.plugins import PluginManager +from openedx.core.lib.plugins import PluginManager # Stevedore extension point namespaces COURSE_TAB_NAMESPACE = 'openedx.course_tab' diff --git a/openedx/core/lib/api/plugins.py b/openedx/core/lib/plugins.py similarity index 100% rename from openedx/core/lib/api/plugins.py rename to openedx/core/lib/plugins.py diff --git a/openedx/core/lib/tests/test_course_tab_api.py b/openedx/core/lib/tests/test_course_tab_api.py index 44537e295b..18607aec71 100644 --- a/openedx/core/lib/tests/test_course_tab_api.py +++ b/openedx/core/lib/tests/test_course_tab_api.py @@ -5,7 +5,7 @@ Tests for the plugin API from django.test import TestCase from nose.plugins.attrib import attr -from openedx.core.lib.api.plugins import PluginError +from openedx.core.lib.plugins import PluginError from openedx.core.lib.course_tabs import CourseTabPluginManager diff --git a/openedx/features/course_experience/course_tools.py b/openedx/features/course_experience/course_tools.py index 3be140ecc3..fe1f45f261 100644 --- a/openedx/features/course_experience/course_tools.py +++ b/openedx/features/course_experience/course_tools.py @@ -1,7 +1,7 @@ """ Support for course tool plugins. """ -from openedx.core.lib.api.plugins import PluginManager +from openedx.core.lib.plugins import PluginManager # Stevedore extension point namespace COURSE_TOOLS_NAMESPACE = 'openedx.course_tool' From dc3510a6190c4b14f1b98a687fa488c1b754b8c1 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:06:03 -0500 Subject: [PATCH 02/12] README docs for lms/envs directory --- lms/envs/docs/README.rst | 101 ++++++++++++++++++++++++++ lms/envs/docs/images/lms_settings.png | Bin 0 -> 170578 bytes 2 files changed, 101 insertions(+) create mode 100644 lms/envs/docs/README.rst create mode 100644 lms/envs/docs/images/lms_settings.png diff --git a/lms/envs/docs/README.rst b/lms/envs/docs/README.rst new file mode 100644 index 0000000000..60948e9a92 --- /dev/null +++ b/lms/envs/docs/README.rst @@ -0,0 +1,101 @@ +LMS Configuration Settings +========================== + +The lms.envs module contains project-wide settings, defined in python modules +using the standard `Django Settings`_ mechanism. + +.. _Django Settings: https://docs.djangoproject.com/en/1.11/topics/settings/ + +Different python modules are used for different setting configuration options. +To prevent duplication of settings, modules import values from other modules, +as shown in the diagram below. + +.. image:: images/lms_settings.png + + +JSON Configuration Files +------------------------ + +In addition, there is a mechanism for reading and overriding configuration +settings from JSON files on-disk. The :file:`/lms/envs/aws.py` module loads +settings from ``lms.env.json`` and ``lms.auth.json`` files. All +security-sensitive settings and data belong in the ``lms.auth.json`` file, while +the rest are configured via the ``lms.env.json`` file. + +These JSON files allow open edX operators to configure the django runtime +without needing to make any changes to source-controlled python files in +edx-platform. Therefore, they are not checked into the edx-platform repo. +Rather, they are generated from the `edxapp playbook in the configuration +repo`_ and available in the ``/edx/app/edxapp/`` folder on edX servers. + +.. _edxapp playbook in the configuration repo: https://github.com/edx/configuration/tree/master/playbooks/roles/edxapp + + +Feature Flags and Settings Guidelines +------------------------------------- + +For guidelines on using Django settings and feature flag mechanisms in the edX +platform, please see `Feature Flags and Settings`_. + +.. _Feature Flags and Settings: https://openedx.atlassian.net/wiki/spaces/OpenDev/pages/40862688/Feature+Flags+and+Settings+on+edx-platform + + +Derived Settings +---------------- +In cases where you need to define one or more settings relative to the value of +another setting, you can explicitly designate them as derived calculations. +This can let you override one setting (such as a path or a feature toggle) and +have it automatically propagate to other settings which are defined in terms of +that value, without needing to track down all potentially impacted settings and +explicitly override them as well. This can be useful for test setting overrides +even if you don't anticipate end users customizing the value very often. + +For example:: + + def _make_locale_paths(settings): + locale_paths = [settings.REPO_ROOT + '/conf/locale'] # edx-platform/conf/locale/ + if settings.ENABLE_COMPREHENSIVE_THEMING: + # Add locale paths to settings for comprehensive theming. + for locale_path in settings.COMPREHENSIVE_THEME_LOCALE_PATHS: + locale_paths += (path(locale_path), ) + return locale_paths + LOCALE_PATHS = _make_locale_paths + derived('LOCALE_PATHS') + +In this case, ``LOCALE_PATHS`` will be defined correctly at the end of the +settings module parsing no matter what ``REPO_ROOT``, +`ENABLE_COMPREHENSIVE_THEMING`, and ``COMPREHENSIVE_THEME_LOCALE_PATHS`` are +currently set to. This is true even if the ``LOCALE_PATHS`` calculation was +defined in ``lms/envs/common.py`` and you're using ``lms/envs/aws.py`` which +includes overrides both from that module and the JSON configuration files. + +List entries and dictionary values can also be derived from other settings, even +when nested within each other:: + + def _make_mako_template_dirs(settings): + """ + Derives the final Mako template directories list from other settings. + """ + if settings.ENABLE_COMPREHENSIVE_THEMING: + themes_dirs = get_theme_base_dirs_from_settings(settings.COMPREHENSIVE_THEME_DIRS) + for theme in get_themes_unchecked(themes_dirs, settings.PROJECT_ROOT): + if theme.themes_base_dir not in settings.MAKO_TEMPLATE_DIRS_BASE: + settings.MAKO_TEMPLATE_DIRS_BASE.insert(0, theme.themes_base_dir) + if settings.FEATURES.get('USE_MICROSITES', False) and getattr(settings, "MICROSITE_CONFIGURATION", False): + settings.MAKO_TEMPLATE_DIRS_BASE.insert(0, settings.MICROSITE_ROOT_DIR) + return settings.MAKO_TEMPLATE_DIRS_BASE + + TEMPLATES = [ + { + 'NAME': 'django', + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + ... + }, + { + 'NAME': 'mako', + 'BACKEND': 'edxmako.backend.Mako', + 'APP_DIRS': False, + 'DIRS': _make_mako_template_dirs, + }, + ] + derived_collection_entry('TEMPLATES', 1, 'DIRS') diff --git a/lms/envs/docs/images/lms_settings.png b/lms/envs/docs/images/lms_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..867f8a06bf63b4c4758b556bd020447ef6fddf13 GIT binary patch literal 170578 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

GC+*=%VMC2=myw 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%0AN=gm1d{OT584nN zQa#w>yuxl|Ins9Yw_A8O*WBG~ieU8Hy?Dvt$ZuG(Z3Z<({uF8}>W+X^w7h50=e?Z1 z%vC-gizWV|>ZF1NY~MwarMKaFm|sZ1#h6+<%EwpzzDcG7w*@wt z){Srr-W$Pns{5x311-FEQ60P7dJ!+BDBZQ{oel&v{Hd6#swleZihs&Jk6k_kVjb4R zGSuBQBbtT_oT?ZaH#e}XDq*}*b@ZYxQkTa}XHEh3>dwl{%cIaM2~M^g3Ohsco;fCGAv%d_f--v(6OG{=McO zie*sJ*103MP(mN}B!lDGTtjmdET8ehBGcc*@DKLNa{iAFsvC(^$bmA*%bE7$$BWb3 z({VU14vy1UkKG0rO~%|D#OI(v_f0mU7^8C)!!c3B|3Xz)cXxelja@4LhA*etSI43^ z`R}v;%a$IRH}&x&$U0YRijAi!e|1n%6|tEsz712>yCf`T>loJ6>Fa0G;jcOy3m6IU zF1ptlV`Suw;b7_bEf^6T-1zCGivm40Cx;ovj&C*Wu}=8kR|7{U5g}1~U`EZE7sx0a ziytR2#vD4FG9ex@&49W3`e8$+$k&dj$L$Q~4P*8F#Y-ta9>0;Q9el*-JX%tWAJaIA zPP49=gRPN*RwR-Wr)i!|M0+Dm(-!Jcc{rVLp;m}N#Ke`?TxCoBg9Ui7{_4&;B1?u55 zG1z@-YMQmMgPCLK-|BUsJYbMj(6A7lG}akf?TLI9?x%KE+EW z7=hxrnp#?ugEdTd*SID#&zv)y_1Zy7m5Ik&ot?jT$05~q_ThJThL=*SD_9g8VX!3E z!l)|TJ1oSKRQQ>3nkUI1!1#ns#E(E8DFBXnVPr>F(Gn464I#`*KBWQn<}joxhnO!=3)*qZr9;xT7h|)4p-`hPDVZ zV{9X(DP_~LAD$-+U?Bt7dda=fXXyKQE1B9!A5r~tg%DD~HvGnQlvLZk0@d(!7274| zy2c~h4{v6WIw< zR?^*fC#ZpW>>y-EERXF4eyHV^l@_8#_1SoqgDv}L`3ukzgOsi zK0Bhr#_{;?Jnvtw+@hfn^!5R8z>Zb%NlC7Si(q??LuXX4{NDu#-y zkJ0^h&SSxU$7Xq(NE3Zs=d~I0(d>&MkKb7VEi>&qGpU}0OX+wJA0bc=G`@9&THgyXI{nEvt}Z6Ks+G_`N~-tnoBYoP93%gf~72*DPA zkUo9@X+eqmwnZ56WqRIPo@(Q->I`ao-#YPG_rETdYm1p{Yc~v#de|c3znw|hdGIKi= z%n2Sln|krYa01HxN}fV@a5}O9Ij%0AJNQGO>wvWEhY!z!SkGzAj)mlASc*Bb6+@dh zh}LXZ7IQeWr6OvmgU~c{+byqT?JB>oUsrMyc%u-BIroUvfUhut;hf1~K1lfZ?vYfg zs7U>Nou3JY8irnqdU7Kn8{#@ICsH}Qa^)0S!vArTEHpBj>6X-9FOEg zx9XFEtuCHg5(8rhgmByi;Lqgb^xSwvYKC3bu6P3(d`aj=c>wvM>{jp0oSf$q4r zJ$!QBhECyRXZ7-Lz-gxn@B7BDe_AL$r}KSpU(Fp4LdVD_dR%U@S{2)>s(!5wo6pB<1iA-2tA;}`FC#H|| z?XZ!z0l!7m@Q8duW71&6by_$eD2`k?rq6J_!xFx$ygAf#)wu~x^OeHvP*lfw!?Y6n zcFr&pr7Yk6^)R5yM9Oe3i1JDCaISx}ik`&On{8UsP6Twj;&Gk)-IbbnEb!0>#>?jYc5?C`q#NO#Bb?t?(rQ|FP7gkmB(uIqQY zP0o1ZHznEghliglRubPE!5KWW0KU-qM7(crfe>%~`H5WggkS6@eP>Ng>ojEp2}O&K7rgIZYk z0Jtv}wbF_(r299a_)et!>SVTdD51N|K>z+*MUGjo3a@*~^1NGa-yvhqeJV~3)8#A< zcbym4sz{8~uQkf2O?gDYfTZtfA9`(V`Gyxs7rt6PixE^ zCt8-Fq8yuZGRw^;&(hE|^RU?TktnDN2Tw_M>Vv{Rg1SDgqYN=NCT8S(t>y3sIyyT2 zBK5}Z)90@z$oTr2`i5?qwN^R=zN=lPT=AAZ6yk5`sENU4?X7c5ax{4^4ypk*2;|(q z8w77@+DiJ-?B3pJW?Zuxfi}p@F;P$L#m^P{XP-aWw(k#BJa7>Pp?bK-KSOXB2QKVf zLB5+~&0hE|c=~7jj6vzMU~IPu6o%S5J&F*>BQDq26n;EGM4{n3buG;b!S_af;Yv!X zs;V~Ji1UA00K-BDq-esCKv1`ZT<5 z@T{J3TDSP@1WQjsv$~M3`0bZ=H0t?g6(RkqWnJX2!-u^Y#H7Y|vvh)DvDGn>=wdTf>mQNu=_>@5tOIV%Blsza0`pUhKxW_6-#&>6sLZk+%iti*$LGI( zK?u!X(KaeL$-_QAv|l;R`O^$H*Ch(eh_H?=Kjj(AASvPaem>S&ih+YeDkIv()u?(#kpQ~j22{UIt#*^Ik+_YukI=Cj+tJ70$s++`k*q1rp+ zvd8b^x#pX_Xp;O+LyRX85p)BpGfkdhwiNm&dXeThZ#y|xBQz>|Cw7`r1LX_(yq($mYg{vY z6QTBX^CrA=^ek9J*{mJwgY}2y#?Ld3VT_R07iL7`bOG_PYTOLUbo1|AZBOEDNR90c z!@XAz#W_}k3spZGZokM$#rw&bbT!Y&)`9xPFO|Ze@}$|bt4>8nD>x`@3L7pb(`=_` z)^JLsPeF0#E94{?EBg+-Czt>j3TxA}+v`Ce`@VI4wSGz8y@-3aIAiTY7D+g1a~lxo zg7mpx8pi%<)cacucZe)1k*CVPv{lxxSHGD54Kt&+Lj``7B8iBn>Bu5{AL3Ta{B?7B zGW^{4$vdDANoL`bEgC$LJ6FoImQeYgqL4EtT@Or0z;tj_oT zv>8NXP;19R2XKDXAfLPZ2+?HU;AP%$+N9>N1b&S9w~X(Ugltz0#9}%95A#Es)@{zM ze=Jahu?;CGWU|~z$Cpxr=Jj2XYXyv+oCM<6X>PlJD2+_}x(S)c{BgAP_3MDDwo8;0 z)HWcY7SOwib}m!v$a1sloAu*RHQu;jcj6`BRx~Ixx2&s<%LMV-=t4E?;jMh?=HMsP z=uC;v--&>>YQzMV1qV7l6<5B~3chNLv!TGJH#Ww`$k5r{1lbg8uz(D`4~?jqRi0B9 zwMCf^;Kp6t@$KI+#-W{ibaGWJH)ij&OXl1XX{wB!dA3oB5|@!)Z7%&myVZg$Y|HDB zL3k(7>`xFb^M~JaDPIcJf*NchIRAWgHcB7p+qG2vjapLhr5J|ADqpq|CF=K=-Wma-^O6=*`oLXr6 zp+Iu@l{rk>e#HQr{xU0=;j}5uXGuFtGn~->0-D?IfczULU^U+RF)C~C0v^%5Bmrfe zY+!lax%0fVkNQq1pWP2w2QN1T9RxSZH!KKINjxWfe9GZGS7;WqNC_ zRA3ilidJ8c5N1dXP|^ZD{+ z)}>;cIp|$9!p0Frlue;!6B{qCTXbI{9vU74?FD)&(u^P74|H0pXHe6}v7fCxF zXqPI|6dY2*bkhrM1^8R9Uo_rQy=Oep*nPzEEhd>>#ZrEmW08xCdU)g~*oH4UXL84x z>@Oksr+7{;R{oNO`dLWMXDJmir`rx|Wh2u*WF4>Za?Ckyb@)%L+ZE9}(Q9k^=T0Lp zv;!84HUsFSe&KY;Kntrd1IyAO;2WLQZ7s^LaqX~8^gO*ix+`uSiMPESVP{oIk`528 zZ7H)_@|J8#`w2;puWiQFvl`>qZ1NEq!)Ict*l!~@)MJlNn%E!G zuC%00f0pijNpmj-27Yf@OgxDx9ROzGL5I4v(RS^(ySZnt_@3|@F@R>Z3ai$!LJM`e zhDXrUlPiZ%Vc_A{g4&-?1_fMpiIXnVYdSf#J6`3{?{0Ocpd2{-1ok|A3abu6m^cnA*>4Zj0j>@hfYqqb5)ih0r8~LV6P9C50sM#w{ zMX*Lz-_(yuW;MHRCZmDQi_P-cD-6E2_V16*AMfi5hOS93DuS(HuKvjmmNqq2fcb81 zuwZa5fhi;G?uN|K**=hi=`9hHy3ytFt!~fh#wEQGYeY?Hq>sBoAR98(B8?n4lgTZ{ zBfb&U@PiPW{7tw!kt)RmR))}62*wxaO>e*(vsb!}%%4*%?d9&S1YM$o$NVEccZ_o) zN$_jYV~&MY+J9o9LrNs^IH~(D2RrJoD?-PNFEvTDmA|{ip&%foBy}QkGxH?C`{15_ z<|<-~1G1WQ$2P!er5oH@A08>K_s-ckr1gHvVDodE@Tv?YRF7SkWvF@l2 z9zodR8`x55$Y#dvcU!j}LwxN)oQ`Vr_S>X={n+kz0@db%qW@H8AY_+@AA;~+5=AZ+c-UVl5M)&?-)T9q80PTnAGE2yLZ!G+@*a#yaItwc9t zOQ}+PCFkPO-&dCpa&Uqvj^}2?+#?w6Odv01^M&u@e4uYLy|W(@o--U}#+Sz*kGnt80$^n3kt- zV?$b+>BV@^bLrld$n$VKt=#7AXVFU^4!5rJ=s)GF@Q35jz1mRkR1p~vtYw4qus!!W zqhsJp6-b_HMUK~BbWPbCEZV^N^fqoUA=QcZE(dekJb`{}VPrUh18Ma;lNhV!KU|;H zlQ-J`397J-OyLQ{^UsDSLu)x`bfoZ~xV&?irhfId!7Ze0M;8!3Y~-G2f^=c!nSYwB4v{I}nXFUVt2E|lAK8(nBQ)J)&AVA0Ji<`yRZQI3%^Bv(C2>?D#~ zPgyux0c*Y3)-HX=cko&^_U;#SNNkX({ODk zU1-RUbT@vA<2Fzur-7%BRJ0yR`8bc|N`<>Ie?<`T-E`ZuH)`u;40ny>-}=C~0gUA+ zB7TDFOXX~$L2r+|oiiYcmJ&}v7e#Kh^${@?2RVkal+Xj2Y~&_6*s{-fI@p#EEEH_; z&*+asKrTl^?wNXk+>0TfgPLMpZ8B!|EA0E5b)R>`b!o^#D}Qk1yB%bErvRZOG%`K# zpZOT|#K>s~?Rqx?tgMwZfH%*ysfC36Pmk7n_zZ|o4Bdg!-;vEi;Qv=gvzjz6UAqk( z{s=YFP|R6@&rZ#mu5EvNw>YKs@#CyUZb3RZGBO=V<+Op_Dg*G(iiVz z-?$?N+M0M%3p}RxcKRz)h;%zl>fdO|5rE8AH?p5h+>1#gvG$+HX*ZeylO%WTS#3lQ z|G?J%0OEDn{o+i|^rSh(SatKj_3^zJ6syJIK7sLX&5m??JjJEe>j_c7V<>I@XHc)R$brv1BpdM!>%moXkIDcNYA zrHg-%Ac&iw z`VrC5V&%?m!JG#Tf+_5#LvP%mHh7KxUK|4i^Ih|Nd%WvabY6KZ%Cd|n8(Z8I!et`E z?w)$b+E*^4_S=;|_B(v51fAcXeVv1@5l8A zK1sZR1wzhWdH;louta)NZ&?*5~WOp0) zSh&-{J?5Ao%GB>w_LrB!-yZg{wNkE=+z0eHoC$~3qw`mc07EmEbbBZ7iw3GRznj)2 z18FZp*ZCpelhp#+O6!b$|EN=NT8R zHy771kLcyF@C9QdmhmMk-9~mf-obtF#i2;$5F`BIVKEh7W>iYTDn5sUlGl!&Qj%Rw zJtHH9yRL$p$$eXUPuZQ*?r_dSXU1Z|SslbR@T*M>L3=b1FNa6#C!QVD8G z(x1KoS9e`j?gwvQJMcOfjSut;e1x=ujUXEf6(aj8_Q2S8SK(OGQ%&)+@2#BD-Ma>M)y?AwlKi$_okqv^W}^J zaoN`cN{|hbT;B5q;+Q+3MnLeDK%hN68Ao?P%>4lY@x**Qd#U(Mqt3V)Hs!2Ams8g8 z+}A?EYPVJzdPcbe0$+r~UA0rpzVulK*iG|c^-KSY2@!cfOpr!Hc2;VT~ z>M#n5jj}L@IrpTC!-e<_D?B|(>&o&|AnxQ+G#Q_=KjLuIZ{s_idd9~?iz~olNoHBU z?w4_!4RdU#db`5jQ|WL|qwuW*5g8Q#ZHl@fZ7iFbFtM6tk(L zm?WFDY=u`Pne3wEC>Tiv+;26K*#Pf!o`$-8_vrhh=ARWrXkb z1dHa!pG6IK*&JN(pxRi?R}-hW%>dNyeundQ2w zRt$RxP`K!Tn2e8DSyjDzqNJWT9LPJI=si-sBuuYJ3o_ZS5%I@{^f&?r6&M9l%ugw? z+iUEuKzHsWg-yoIv(n-k@j+nR{-6F9DT>MAx(};pC@3iKBjj3wK{Q7&tV1icw%sE* zr%RX9GF&Bt-?cSeaek%y-wUOwNngsy)ZTRSX7Ck$drpr(F4GQ(OE50Is_k}q=#Evz zAIBQ{RZ2axl5}OUwxWYxq1@4mYX!I(+T3Z_+bcw1s^hislcPtk#A*c|u)SJ2Gs=6u zt>|hrzU$FJ&2LRw){(sSaUiRmfQ2N)thjzEBPYpsy84lP% zZPJ^A+bJ)SwgW4yzM(lS3JdHG+fSyc0fiZN{h=2<_>&;JWb4LJcPQVDH<$!C)-Zb> z7tb6ROSu9OT&%nAM32sAXEOvUsDxGB4W~ezYNu{qIR~<#q2%PI7?Sf5t2~w&rL?J& z83wTN8E{$-`24;Xmy%adNGLe^^y!m}9D^5Nd?->+gT(%bM#;CLtG)Wzek8f#jAP|6 z(nE%dB~WGjUE5x@bAf%JMQc~QoTz)#r~^pP8_Si;e!PKP>XTy8OHzW33hmDwm))vt zZW%H{Kx+>f5VpT&S-wRk*&>Hza1f1A50#3i&+PY%O#S3KjbY{;bL)|~t4W3kteQ+c zAvbWo-%%!d!xXhofIJzvayG0X*+Qg9O+Lu1j53`+M|r#$`SMJ&Q}0Gr4D$S2or-pa z4tRwD>tU8hNzs`ztUZcgiI-jwPYHq4@G=!8+Vh6Tw5Nz*$J39r%cR?_RPhDb=U=ED z_$^db&*ji=DY?V)+B_PPyOnY?4Th{c<`*eYP;#<_J6NLV;@MD9Q0lQ-7P)JBe3U%M z@UdsVmU`Xj$%HY?yy{wLvMg3wHgJM@kx2bTqNU*CJFh2|m zv_pPyB$~JCd%z`0<}J)}w4G(ik&8^5dGZJ~;SADFJm_T#kh zRgqYUvB;%sX3_cV%@ywvmyqjPPOe$=Q-o)`j$Q6B@;{Z2rGQZWKBtBZfo%`wO_v~z z*NBZd<(^jo*cysT{*9FL#kfE*jgqGqjfT_4@V}3U?I`speQNExLYiBVLqBPNoCc-6 zOO>2OA)81^_)}pkt{au-vlU-`uaBslclV+i1bqV{?*k751Dnq{MtQU#Wkz8iE2aYWsNKj0#LR*&hl9aJ1lVwIr{ zx3>p9Hjd-dM__u=xc>%(`KRKqEW7qw-v#3emp`#8L`TVKQQ*8ieP%4*@xI96GKw~f zA-(2l_GIq>>5|QJJt$W)%cOjdZzoCc)V6e!P^OY@TDw6c_Hi{eU#M=ZW48ju!Pr4y zr^acPibkq2SyHlLsjbR5_}5-Rd=I*#6`{qh=#}kPP-=*Ey`Ns%y0Ef& zSaT(uYC<|Le}LZYj94V~GU~ZIVvowXEq`92vmSi4Jxso3pLj|FJke0CLTxRFpe*w^ zw%+UOS436amjZS=3SuizJMtI&)}m-X>VQOK_ih4|u&+lPtS_G8!V4+gwn8qfNUcC= z+py)+9tcsO^nKutdFQq<#tE+$owb{`;i_QDeg&%?3ZQ-rJs#ef^Y!1?HWKBM* zn?ggGSV|QMM9WU)h$yP6f31V;Dj6CZ1ILB9pW88ck1IPaw`d489nQpcPd$ZEuaObk zi<{F=6x(A-l;`*-!QLQ)hV=W3)OBXf9zW1C*le}TEgUm@dc#}2!J$td7(gd$r=u6- zVceJtrVl-LfS;XTIPI?orJ1a6H^}oo_83T`W9&9oA5`x1B(Bh=cv`L%zIav^X*v0s z8jYLjih+jM3R|0H=bq8GaqIlcENms1|6%e@h>7!1xxHo+Rm!wP=B#t%y&~W$Ae!|i zRZczbU}R;^1!AfOt>=s$jFU;-59%DVc>o+XsZ`Z!P|);gQA#>g>;5)L z%I8-v6H5l{dl<3*6~l{x-K2uYHmafZZ^VOiP|%@ID+Z6+ zxD7O=uXs@_cT4#|8CTwy(}mXu>OCVJIWDP^Wh%o_N$$M%>5-NjSLuMgLxR~G=@=d{ zo543mMHN_5A(_97K}LjugBKn*jc-{Q<*$R%4?%Yb#F2>g$tce*;;MshOIhB zjS(K4>F3h{ncmAGjgH(;FP&5o)!+xh?SMNe@Y zxmkthXNb+>*`1XpiwshtfN7NTrYukJT(fBy5ykA1*j>-Mn2kkHvnFJt7bY>cq^FbhUSi>)QW>ipS&{r2eDE32FCh9Iz))kp8`t9_im75{R6h9|$Awmgp%e zip}Q$TVw&*v~U2&CVE}i&L?}=i3u?w+CvoTbB=wW8k>dM5nA(%Ua>U95~voIPxYq6lyF?X1UM^ikVbm;@Ojsj8e48%By z;q>`pYM4f{aOH9GrYyv3kF}I>%~z94CT6l|-u*0nJ-4+n)8kqsUz*d$|l!mHHD)6 zIKx&CYHCHi&0r-en$hekH!-oKq=reBmjJQTebu7%@!OJT=f_>TN*_OF#83z&Hz3#C zFw+5qrM zt(Ta9K00J&ApjCv`LPevJo!#)51$VTe{kq$wsm>6xCJFA(+J%(B)(E#fnd7M`a5h> z4b{k1b5%E`bMKr?OR;rUB&s~v)D`&m2szvK2#pzY*bmCHWb*#3gia!0pX%HXcvu%K#vK1HM7KBI-1e>Q(_4P!@kwr7nut!K>- z>W}XyMKlD0a)WCcht~=@w=DLnM5F6FSu^=fMs(rLRgMFn5jHnWvOKrPno>{(pivFD zk-{@ca~Zy-){ea>GxLDR;dtT^J5>r-u?qCJp~}8OK@pF~WhvCLEZR@0=Y|A->xz67 zZX2W?pXCQ*prILsd~@==)7B_d_2--dTC2sOu?45P;PE;w@ncho3h(vciYdCfwImd* z$sESNGzT)6SIo-cQQ5on#3zXs(X+L04^eVbUlFimk-|>=Tr4uQ1KPB0Be(6=<9$Ho z`P>!G=UAP;=ErTNPTnC9>Fwe-vB5wh+J%)m{s-Bf`4_3JkRRGRt!fLGp0%_yKdxx` zFN^{&&I##IJLF&D(!uTq!Ufu`dhm<2_C(e6LzWd)9y;_><0@)+nsOLo#maw+wN)Hb zHQLu8!m^qd!33=i|X}w2h3M)apLBhtByzw4ev(GDFmo2~u zxZqe?)LPu^ydQ^Xub~1XGe2-6ax1>TE3-1V65Ka-ZkAxGxbU@cLavA<_a5vcWv zk<-souZzRw^j8!VnHxnzI+O>WFr#>^mrW};z!P(BqS+32%rLUMuY909xR>KJ-J+Xj z9`DJieZG?+h$%odvAjt`pie!$u~QvE=2wRBRK5T(3*<+QkW-AZ)dUrJzzGYE zr~_w@q;eI*y)A7Q55EktwU%%um1{cAw9B$ZH``Xf@$;-~!H}bAk!^4s=M!{k78lE4 z0%#U-8kX)MyB{`>o<(DoGkm#yLNS+CXm}F~(+#STr$O!oDm7ngfGt*a$}E%TzD9gs zv#&zh9@8v64b98I&q1xP8*JY;I8AFyK(y|eY0?4Z37!wLs_mT*fy)FNm)F-1l-w~R z6;cdeoIBY1lnDOXa0%g;#5^GWixT8w>$IMp9$7Ew6iv}206};-d7@)9U0wxrO&j9m zzc6LdzpUs#NABy(SUhc{y$kw2(^9ATvBC+#Hf7*0(+rAB7IUduVg4bgz<3d>DQ_3w z?Ep)(Q-LwIH*P8c<;GoYsJ#}Zui-83_>04OKi?R9Kb}rfThQz4yH7(nl@)yi$zl=- zm-cFDak(j8zxHnGe*(@uO!7b5M6=2~>eRok(ag`fkF>&ZC;TZ`3@iuO&*vq{kJbdn z7tMvAiw&|dcAPUdknuwn?#uRpt#5me(-m#ID1m;Xeg0+;}%A zE$(6F(`c=hmly}Y%Imv5&2spRT&r+TZD>gIi=r9S)^IKLkTs`|`cMw$LXKQ48NGl@1 zW#kMt(^|isotLl8zDv6KtY|vT+=ZR6-N`LMf|&(Saxc0PtQC@5hN&W8A_^Yo-=2Us zWJUS&hz3X!UVdPlD;sd4D(1_SmaYgPpjuQeO)q0qny!qj5_(+D%Mz@9?7r&pfbx#P zuA`Rk9YgP6;oDNS-3x|sA?%L%^aqK?_|K=O*q(0HC00BlrK%yVexEaC?To#Zf! zmr8Nn6dZ@1;~Z4p+OzA%yVXyKUcO=AXOvuq=_2M(&9!IgvEj})=$_CxT<%7|sd%&_ zM1}YfPy7Zt%x^JUT!E5!^PMUZtREcQ)`Mbt?j)4r^gT&8nh?Jck7kfhC{~)@^cm2T z!-RjB%2E$E<0eL)2=J9THVOgOJtT^?9^gXQl$>L}F7uz~z?wLx)=12_OA zXUoQN^#Ke&*YQdo%?1?iSRkxRwJsJ1{ia`tq%>}*keceH>!;l{_D30*;C=iS>=$~m zeP5EX3~CVC$&1;SpY7pw4I^*AOm_6yQthV{Fpmhx};@uF`$peo>xc7>XX{UE&Ye@Of4sHnR4-w_lf4G;+dQIPJEMiG$iZs|t4L!?W( zOS+}IOB#luOPU$FVW@is-*5cxTKA88?^%mAoHKj&+41D(dG_AuPpVAM1e2>H6Jld2 z3RnhyQN|jzmW*Lw-aX=TPMY*OZ4jBZtb=6EF;U!{A{&06*TWJ?xq$Pe#?wS+Uz|hA zvdFi)PolZiXnKe4fbp`coK#Ft-q@B=D8#Ea+V0~qCO~4BQ?I$CUl15PYu$3f2$?9d zE>V^)qn?}tEF7iGFZ5TRUYJ=cp}=qoQ}`V_vg75KCSC=2+`!~HRj#nE7*QgcpV)M-U8DkIrAi4L|{1zW4S@j zlnXJQTPTvl9|1v(cp0#FqPb--XH%szQOZO_lgixGppt6b>db*UqIyd{1eRdnSQym~-L)~x>QB&%M6Y0NcCW`0s8JN0 z)Ukv`TS+HWec897Y>(%jr031X>jyyP)4GCK-$^s43XK!1tM2g>ugQsx#o&F0MGYt*m_i6=7S zRRMXXM^$<3@Scq%{|vxRWS+z~2mL|2+4q#Eyh|)rE6-%u{$}8{awCoC*dN)gC6s4c;>Vf zp~i>8G&Z`o*l9K5cK&L3)oF8uhCRbwt=SK+KGAY;o7j9Rj#0l!;)uJW=c^fc_ZpY| zPFU(|B&dPGVT5>AztWy_rKb>xot~b@hxy#8Heb{=&II_tIH||d#hwPTLvf@`p4DO5%7 zJbM%D!1JtF@#Tmjs{A)m>~agF*rJHV8Yx&*i)oN}ZG$Q7nwi+aHPaV<_9RNa$apgK zvrdlbsXC-W!7g86j{~`$I=gLSZ@W26c($+|gn84FFN&O+X-OXrUb8nwHn| zOq8@R24Ex6adY$-)9G`WR7+%P6-TICy=BIF)6NRTb~Tuc0f5@m_ENnQFwdrWf^+wGB7*W;*97*oJ$o5aN9PIMty@;$%b2%XuznE}`pH zR?Af`Tn)3aKy>|smB0Khi$xxPI#uuWRA~aP-fvmfFT;0cvr8i8v7PDNlvSof$+J~G zQGRo{W!aRZ<0(A;Tw39w@Gr#^B@BRm1TOD}qeMOtA_@h^c27%|hbSwQVaj2R3+sEM zoBmUux-lzV!tSc4e%CdQ=ML(}WqqV)9w}*gdL0;Lgv|mOoD@)*5vGR0`U`(WS_<~z zzF0PLvCx90K^9Z}J+SnPU~x3Z={>tQs}AOhSd|^m&oRzEmhX8(Re!Ill-m zA(jLLg0#gOg}U-8I4);eTNr7d?z?$}mG#}iSd*thiJ9AKJ_hhN^pTrC&99^}E`L$1 z^QE$NW!##VA-UuchRk-tGK9@CaWR2am4;TKL^G-sW{!57QYkgd;yjI2s-qI$P#+Lu z6_|}lA|E>gZ))K&s(U)2!)Km=?zpD2jdexY0}~lwS&j~{Nc)DD*OHk(EKi^QZOthb zg=@Ysd1bRH|ANct#jBY-VgilRkyD~7nu)&neRhee_4+IG`KyZ3BxeLv52#g?vbVH+ z-VJ6xYS0HDK`eJ_CYXz3G8)NyZMrGy3W@?j^SEN>6q(5_va{1NMM0BaF$x4tpYN`T zQYBzzQycWfrO#U>k9YQ0DU%IzQp@%WKIrLHUw^Pj<*A!`XFAZfSn4b5P@rLB(n==# zqBt3DUz;|=+rN_Js+td}T`J~hUog;mH{Ua|LA~Wq=8J2TT%SX7Jy9~nv@m9#uvh2R zqRmJT8Kx(NPPo`%X}sMqx$;5kb~@hS52VKin%|>}2;+gA6GrInoqYPQU%!SqcHZ*w zG&XD3nbzYG8o77BAFPtfcY_&-#e`Rr30U&)9oqqtFzr@M4sv1T19O%GSlR| zlYjZU9zx!-pC83kP)-(~w^_)6sudGs`DxvEb$TS7Y!gS^K_K~$!NK%-nN#9lNo`em$G zj{o=x@zwlJt4fAnL=RC^_Cs?E$%#_W9PS@_pJ$&>EO84B%4xyy%r>$0k5V3YK3}wr zB{D8uchB}(Z!p=ImmX>!;TVvD{79QzJz`l^n9goS)e`XQD8XQ77(2kty_pm{kd%jg zO?8?Hjwv6*{|+;5wEluDCLu9CmL=K=$hcgddUs`Q&5dqVgiajA{SF8?Y?#{>UfdXR zehDH*b_*OmNnLgP-ypAv{^K3i&pl;2$!T7n2F`K00X+5CXT@!SOrK=?l9b#mAw*1B z#R1LcYpqg3c~)C)1FEv)scQfqLa%!VBKw$EhjxBW~$IvHdl1d zmgL|=GZSC}gtFfYx;&RJ5ptCw`Vkcd{UkFv5-%etzRT6(FAy>2XdshPvN?SUti+qCj`&8PWEU7`aLOWTh zxojo5QiSTp*R)}~ma`yPC-H3eLb7b;l*0LlI4^}*6sW9CI*iboRMnK+YKda$KtZtmyL1(c#s zlZs`?Hl@P0l1fdF_rX#g4F$!z>HHd(NgOkDq3Dw3@ruGX zKj4;7hDUl@B7bgqn4yf+APR+?Q&zU{Rh8wqZzOBI0ysWI8HhJ`bnf!7+igg0d%R@S z-l->gk!@yCMvd+BLWM-TMy+g7px9r1#&wWQ(V7q$y_^xM2zymOVkw`${v;GK&t5%; zO%02D;db$d zIC)10mKMD!UuPF260R*fAeH&E>dSUx63cI^TP-LFpUvsxlCQUKC|6EDoSD@JwNK0~ zHoGbO%*s-jSG?@Eb8-qRS7z-=>QeR1TX*N5fvZ6{;b_*5j|5qx5*?@v4~EWj>IzmQ z(l50ywNXHVb{+EY1{hu$q`3%}bf-n#X6G$jcfUaWp&2=p@R1+kh?IJ{jR+QCq@hCw zYaLA{uAR>(B%`Y>JZdvUg_i>D(~sElpaA?mLb*-H#x8h0GqcCh)mzUp+_lTuOCT zEpvyIk0{><-@Lkb;I9DwbL70z`YK85l^bL*k#%T!dHHRlJ@onNST>V#4tE8s7D3~A zVa7pIKY)W>Qs-}iup*k&d|m4o`9^VuiDwETI4r>J*DMZOe<-V=86?dgCmLnEuwWAh zi77<#dS~x$Zlb*kehtcaddde_H9M^Sc^vi_qrhBZHW6OWVMwBwsDpZ05XSw`UcqE( z5$3h}+M$RGP617+sI{7!x@s9aynYiaMng}p)NB3?lDEXP@QU?k+%9C~FCZjveb9;9 zIABZ>`#VGeN&qlz4`CC%+k$~zK-=Qmn^}~uUoj+tmbe=^8u4HmS9|^7h5IC>#`h>d z*q5pCy%iIGb@s|icSz96-N`cY#&F3Zj_u{qIXb{=4T-sI4Q|?fQBw`2Z(?cU-PyT;7fC4)o7*rVnm;ol%xoxdhYv2* zcd~Xu6=apOEmxXcep|mi<^DAVp<|L-lnW(8FJiOl(;9qaOsXVj1mBt#CRPBs8thUI z#qE56%~SV^o(^G)=eNID-1E*W)@juSqH9svb#?ERD1tImjyB{;2nh*GjWVctY5S?I z(SSI_i;bKjAgC0D3#4`_p(Rq~rP%g|t(TN-4IA?V=-5$W&IxeDW(lw*zpdNZjtd7b zFE0fjpH`ksI(B3>ZE4-gw$ANQJdt!de`>YYo#)NTxXhGz>;R=ktyOcHZGZ9?7d17t zNgx(d!*%H(Kno3Rs)B@+i`19Ja!!<^oEt6RO!nXPGt^u1JWSnvI?b7L0U?RKyVegR zztKD!C_DDNSoc@R3#ssA;Qy&}+Ztt_(@#-#DXdbAXsCwOWdy~#8nyZPVIq(mMSdxJ zl(Rk%pPcTpk%($El*C@B)#xaOXn-LT6bfDXBr2MR_}iH-?`%jP1zJ@>mDf}dmk#Vg zTb067)IV6D-L9H7Kh>WM`zQ8jU3XcHT1pCU%~IDQh_o*~_;p%IwVB+!gxPZ064TDP z6o0gv=`nc@pA)(QDoZ(v)6%xza6{0DckIXxGpy$`;5wV=)<;P@H{wV$P5v>ronQlU z4OS~3x2^wvagWl!=dX-e3@iLo)~e$6fUP(;fjzbyMF)cWuVO2#q#$p+9^*K0Vp987-dmGhXxcJRw^m*j*wpJA85P z;i&hpIL)CWWy<4c`dBSF1>x*NofFP-ip8v>f3>k8r!ULNt2jS-^7fG7zLu(-5 zEr@@B`2yZz!)3efmVPO<>qYPHux^`#R zh_T$)Q+rLZg?Attxzi{DfNUAo4b75lcZZWZDuG|=yaIR#C_#PAAScbWF4c;tV`y;? z7=Y6lllL5MD<~zrWB(cth;Q%tz*$!)!l_4G`4Qv@WaIzqa+anAz$wSCn21_TUKzdY z1%cW+aD2wlpVR_W2?E(f>>C1}$e)+@twKBjvDMJ>jv7Uw&OSukK}ZlOenY7<-Cuq6 z#2z6Y0ZvzL&+1$UAkhBa3Wlr(<(&NeA0$g^fpKq8|8xI;|Ka__eBFm*h#~x5f`xVN ztl)z{s?Kki)R&jf?w{=)B5+>9>kdRl)cxh%itvf|MBBMuY`9r_a3+hvb4SeS#7|3Fo3)^ zTHbj;Tmj?G*Ao8#BLGoq?81FJSmH(9s@E^J)oO?lH!V086A|VQ!A*jiFV;I37zq0Qi0nt;1)k90Y z`xH?`nT+nku7CF?|4EJCKY9xB-T%cUC;{%jpZ&U5Gu!WyHLB%*k}D}vQCnOSvaZJ{ zNY^*o0<~oUr2KbI1bq)%D=SJJsq^M@dGG%8 zGOye-Tnn z3C+}C;`-GE!tTNX$g2e~FcClcx5f_Gr=9FMZ7|J zc{**sofLP#=XcMPZ8)qV(Y&MY0D4wBYv|iRG!}@# zJ|*VpGj=vPlO?4L{V;U9fTOMgmR3;@9v;Y^Fdd<)$Wn1bVMN;@p{O>i&Y2hujC;<+ z=7u0*NOW(l-{B`+TwtgVN-;L81Xg3Dr*UhhWa673q`*Tqu7@H3CQzv$mw7+x@M^3; z0G4uJq=32wbYRe&e^h~GS3@SnzDB1*(Icn_B~%dh1~8+wW@HFB!DNrOrQa8!GfW&i zddiqJq8PiK8yWc-UrX-a9An*NPsU}eP{bBx0n4Otha>@ni@Y1i+{P~-d<76<+YXfI zDLx>yOe*>nRZl9V#F8g1C(5(Z$)SzF{-pi9rKAJdN48Md9^VTOyYH@bGeVWw`O}Uy z#@jXMRaNon%?hS-5d{bC^+=sxPGmI$v(MlT`-?P{ra9HcwN%u~w-kLN8?G9UP^ROi zuO*l6EI1u1tC5grc?#SZ=qYGD`X*}~hA!4Q3~!z5u+0$n%`DtEnLvc(Vz$nEl-BxlbB%04;!B4PuvIhQ{qc61I1>vjCF1_6U1Y zm!XmuF*YxC#z~m73nU7Brfjc41|o6ZT&9jW%dj*@_%U!K6oy5UoAVW{w z(<(eIWqQhTMAP*5dDWuf?C~P>fAxQzttJQxW8#C4fu2g zTLIt7>{@0tPR%Fe}WgWxiq9pJfYzDK~4;|wluqLURVjPowD8wcCw9Utk!cXk3Pbf zO)?_Ijm70r7eX%FZerc{3@c#WV)+J;m=h1YhU>TYz@B* zey}8oa1L_vqqCn5+-Vo}zXtka^5OA4=f0)n$l*e>;wm?-htFS?i_cG>MM)cEn3JL#=pXtj1ZWt4B)PQ-$}Pz!dk@vk^So+v+w)SUEUZDL znmJ8#U2N%M@NIS@(sq$NFXmS5<>7Xk**EQdyue;vr0-@v9=l7<(qNt(t!uSrNjNny zQG?J5En$B-62Rr{4F&hk}4#2h;j3vaKt z)N$V(b=Nb>jRyT;S|BF+!o@H;=cT=U!qFa?#bz$j^zM^C_r9n|gX0S^%WLi;9oc+% zy{q(x%wP@&B>@GuftGyZ6L40DrXu#lcd@U*j$@NBE-^UORJX+TPm+D;7LS#kJhc?j z`P|4fUlyZ4pKU&uA^7p!?n8G~JplKPH}bpBJeOujkA>k90lnb&{*PEeJ#F>~Vcchg zMN!PYcRWM#X!gpw^ZQ(d?Q;EQ?c<#ObiMem7jI0-Iw>aYx&c^2+pyKD+(x&e#!i zbLobfCYHYPsBqZbd7KWzB0rM1>1_J0Cn zBf&SqfIR*Bmy%d-jL2!}FQtXQ+sCzDuR@F%YKKi0IgWzj!OyLwZswkY8Rm%|Qe_T8IkYP9rq z@`HB&CXCV4}DsoeQVS|H5*Ld=7MXFe0=58HiQ6JY5iYQ$0je=mRvv4-!X zxxLYhT%3|2X@sk)ub3odT3PzVZdkPP^^~r^uf>Wt4Rt?1ojoAUC}4f1(`qZEd}=ZA zmJ2?r2lY(Z!(Ys4NYt){?Hq=|moG$8`4UUL?tYY35>(>Kx_mrr z%6)2OmZF8*)>ngHi+P==Y?A5DTNpCjVi>f>_-Hpxz6M7RC{bXy6+^8UFz zz2gJexq=wRed1-u+{JjcDg3s99mpv}u|xKZrm$USPEl5bm#DknYaHRfy?1h`_{EY~*4 zS?cIrYCK~#=Qzx;d8hKz0LIT`PI^)GX}|($B=4j7`8@Ee7r$}Z4Upw>Y<$CUF6!vzAl;g{9dlUO8v!VtVCyMjF>M3%aC9tUO zg%SxG9+f2yhWw^9dbTb%ZaV&+^4VN_!&vbdojr#-w(Y&;BPVx18FL`cfdJM__6Cm* zYM9bg#jSzpKR}Plh=gF;VdHm&Ki~8KrkBN%`(+6_d%w%;T`6tZ1K?T|oYm&-DP!p+b*e`lGSPJh~V^2W_t1&ta~#oiK~ z*=Em}cT4jno~c&;!AIZ;b#zWYN9_2RFHSQrk+c2@oF82Pow%0@Z3@FT+2c{;uV;Nm zT5Selr7QuGJ83JVcu@S5xtPLDVl&4H4;GHAPsPE%Q_&9y97AshsW=J3>8VkHM48y^rF`PEa!_%tX*U)6Cvr6F{x4l4{ae}2606LY|B9M3rU@dCW3{FuH@s?P3 zG=v+pI@f-0eGW;742v_G`d)tETRX3a+9S%z2$vVzljd_cw;0ypmJD^Tc)Ht6YuI;$_0Z$f8m@@txwT`SfVz zhsE(9pKr+ICp0kEc#3fIc>JBdE)kGU{MT9wq%2@^hDQ6p3z!*x!?l1F;xMq*I!&Zd zhtKr$!5YY1sg#q<(=GaFG|v|aVcAX9rF-Dv%#*C|s176b0#F~l2XMztqZ=-+2}42HTyC z<9br3T!ozQ-9jvG-@z8j^S5NhOtl;{^m-0 zIdxFUxP6><*1FCa>^OebjMKr`s56xMvI49_5yZp>z)$!-0FpDh^RHl4TwGmfOAUO; zS$Xa`v5-Odz`(At`fR=8`P4}`aZWiy=};;jltmumH7g`;Lqb%IQ>aUsW8EBUrpmXd z<{Qw6hU6GihzCIpPbgTuOIWRvQh`fpWkj2fzc5hI-rUrPcWZE#vDAE7N?lvufM0g_ zmYY-7Iw}2sGXe^i!082HE z%+h%4k;vsh$QVm(H*5n;(YCS-~mAmRa(e zvXCYA?H>n=+a9^!m}!gal$}Gg-EKCpH(4FCNJ&d>*;`0XWnVnKkp|y=R;MfIDB=Ue zzE$;+Bf=Pk(fl{cesNSh)=@Hm@PcamaueZty^@c_;a1kUj>P;080+$CiI7wOv|tkc zHV>2&qo3sG865i;B9xv@;M+1;?IF(cGuYKUPS`Tk|;82afF*}0tTX0fGA9jON(t0 zkMMa0V`l1@TQ~>|C-Yz@%eF?Yp48^+NEy;~7#7G#7U^*q|6PaD;6V&1EA_fn^MH(e zgkn>-kySkUtPC&o-tv-w={gP3eftS0Mi;~zK;A~BRa>FbS{D(X+$|b13zu=7r)ZVE z1pzPN>sj-UK2bpL#Ac`S5yKnbjpKs|Hv&IGkptZK!km-EJ&Zpd-LBBuRm0)04t$z- z4k|)JEtV}bmEd$tovV1}@ddgZr@UNmlh~zv(?L8SZ5Y6n@DSRWFdSIk2_OPhHvdye zK1f0m;3P^H5xD);^N>wjC#mq?OCCG_X0|}Thr~~Eyrxmwqn}kY3OTw*{_c&8jDm)> zrn*5F<|JPcFBwtjNCeig>NbBV!-FvzBlfTvpxYUEK=!iKUsO;TffF4+@#F=US$fM* z>X?mR5}qok^g&81{>%&aLDW=SYc=vwWt#I0rSW`Z5}0LV1RNsX%n!b^6a&0XwMsBg z{k)hwtOzESh|QtYE>gW(;B!f&}tbzsLcwZ2&h^soX;|pCJ2H%l+^K z&2*}~v9=L8gMeyKVrryY)PCTH<5cP8igO$d^3QW|IH}SwuBAf6hVf_aNzej7ZxiZb z@ctv~kUT4(uF)OU3UD%zgbNz#Y`64^BTsFVElqys)g*qJOa_yTg4Nt5s!b%W5*=3q zh~~<_U}HA_>+zTDdS@tNNxA-5!9e4T0{?nfbZSt2ASJ7L;RR^uli)d(0~##(bSKMq zDf*-)J7jSWKt2x`5QwI?Q9$tth#^2r8SekNLD4T10F>E;41iUUAa98rz!aZb@sfy| zwQo^wE;HX>Ct;7nfHPcGF;vCbL(v^t$vzQpC!98~T_LSk=Nqfs8BhKm7E`A-ErF4~ zW-nr)^$^B71+Yk*4g|hFy7S+u+6jLFwI_`kDwJI&d+!EJM!esfoNBPh&Fz0GqfBctSM%k-gYS3)%hAY`mJsq;*PPt?y5>K;sQH zVHcY%0*vG}dx#pK$=PV{`CmQ1m{HmEFgPo&Qm(-uqq3kA|+|{F#`D3NEc-S11#JeR^Z8vTr!r*byL8dSUqS(cNPrNLYK+asm7BZK1zhKs*v zxL66O9hPA{&c8ZB^gqQ(i8}S6`vbJ>5RgVK%-qQZ7DG+ zPbKx#ul;=!rAe_(f{cUVjw#Ir7_O9LVqOF0S&jnf6JbyIbGqiToucjv1t{}iM2)lU zwR{;9cS{z+DAP6N7H9gdH~El)wNNRKQy-{lFtT&WIaL7iqT zId6`dP%0{n;m$aUWyxK6{4Oa^nwT+v_h5;Z{%Z`2fQL*Oo!A5{G|RDC=rrS!togll z=p4E1;m2UM&708F>>S3Su?ubXAr5+lo`535+vDe!zrWgYnIuG|CudPo zo;l2XJ5NvCLpq?$|Xq>&Q2xTb@W}A-TSQUS3XPTYW~Lq zB4ZJ)g(X2_jyY0miR|Be=WZ?dI2Ib-_3YV}uCcw-BvL705rhl)S73_C-H*ws-u0ba zL>H6SauCA0kS#g+EfRKdH`jQTpI_=`{YNLAsGabw+3S{v59pr}$cjFD`pNIUL-5bS(k6vzo`+2d zB?VpIpMl%bq|(r)A{(bpBvsCG^@nESe2Y;PlOrwT=JGl>y5a|s+|$U~69`Cs3&<9Y zRyAjukkZ#7ec{T>F|slJtcqhWkdEKRw;%1>VY;M;3(#NYF5g^aAzDENhs=RBOe1S* zhZj|X#*UgA2kau4oKJ$`q9VFx*_ZEomG20W83R}CQ=B&bU=n0UAYb5k&oS+?iv!22 z5aT0f0Uv8Nz@d|!MFZir=ZfmNL){qq(cjV61ywtesb~bkvKp0_kLe5Ed-33?k&eV_ z$KO&rKK@WVKp4iKI)wYaNuK$sm?_cW@vh}`t2wf`wecHT%N904_3}qL_(*ELZ)}RM z-&>`6s(_8nj+PFN!zAaa`aZ!zb9EEAWmKbg_fWfE&k5j&Grko)lgtNo7%_g@fMQ;| zU$GHdlZxJk`&DFE(_3+T4k+b^J2h3Q;fpd8=opfIg5D~+w;b~A%(r3*#Am-{|3F>8 zC$b;|_AwLxs_1<3J7aP`R?T^%cvN0++0e`|kD&CKAjksLMA5o!IBZ|h=d)zNX#taiPUXi_AX)Zp=p#;j7oBO4Ie`M4rPk-QS)b{xqj5t~0lA z$aXqos&fq$?R-n(0$Z77!^pb=9k{k>;3H)VjpDx6dRRL8_RSmDrvrWwT1-rcfyNfq ziREv~?L-xExUi2Dudw&nfVD20^dBEY77OqB{U8W>|LYT`pqQ^}w=ueb{*zCzT8(ns zq`FOg#_y8J5haDXVk4nKx%2WbUmE|J#Oh004)WpO8q0b)ujvNuZ3wpef};C9;%P$F z0;`gVC(|5}gWN2~E2&gpu})0CxD@6$M%a_&pDSOclG78nTw9bCKuIF5arR$N$~24^ zK2c$$b6%e^39tDj`}_dwfMC?Z%dYzO5H3>s*Or4(uM)=Tu+eNFO`P&=r2#S??=A&F zyW!~P;%fu?F5!I@TUwjm>B7#uR+$(JU4j~e7sGii-p@WpW|L^Qf4-qpi)z+TR4u)m zj9i@QT;5}) z!BPY+w?Rb*mrbCeo2=U(v*`mf5{T?+zTW?*8CJawN-;`y~em)5c2^+(K!pCDe{K zo`P4L;PXs*LqW?y$;9QYO`Uy+_lo;h>1PK-v+~Pt6XCXNk0s`^kljzNzD|DG1;6+x zO5x~vh5fF+gJp_|4%fFG79zV{`y`(q&h`9z!n+l`)gr@ZalI~8q+JF}usMIlIqZ{R z?y_WWi}S}oPhqkX)H4KXV6Z>Jw^T4M7X>frD?wwon zP;G@jD$@GPOciA^vGG&gxUiW|s18<<1qJwz{EDN(Yh>yBK$wJvs)UxE#vkczyLHRl zc;kjDmD#ldDkKEZJ#I37Jj8AO@smF+_EhkR1jYDiA>*sg{g>!&ZVj|K8V>~ncn=r8 zUnDjs$3b*x+6gj=38zo?s*KOcpg*9_s$gD8;_pT-bpqIJKk79?+^_`4tq;ma2Z-ht z-P()sqar0h%DK%!f#z6SncLxi;xRw$gdY!+;1Mb3Py+j`N`Lc_1Nv+G-m`p830`=z zyvz5p$n5Bs(r?(YWWqNp^BEtMYJEPc&;QB=;FP0gqm(>A0+~p#MH!BZ-SLmPz8?IR z77=vUrxMQkF*n2OJCaq!EzG_AlL8YGCP5B|`#TpS!|5HW3svH56v`(O@n=t}MvFwB z2x_PWHyy{zDLY_M#23jr<~)B1S%06)z_Gp0WmRXfTXnMV-4C7wbX=25hulITqf2!u zHwVh4<4JjP)YFmJZqj#(PKICn_*)t6peJ(IP@8pA5-Fwb?D4O-@wsOJJUiS%zfe*td~pssAG6}%+CKvLHANdIK?0sg@!0ZjZ+R0h5jxpF5g$D!Gu`#GPy z>G0j4*-VsFgG*8pRXI^Vl``9<_DdVKev+FzLJs1JYSQoc6>Oy}rkN6MP=fO)T6b?? zvimz^w#WDp70JRbhh?`ELmg0lxC~S%6&E0=YTADYO7J;Je@kGpV5Qo(7gw#F%9(t2 z%Bl)pYJL}OU+L+TT7HB@bQNxm_qN*$(^uGir&x&eG-{V}5i!k=pw5CAjgV`++aut{ z6w;L<9^OD#i~3SdWyx@Bz8wEihl0bs5xwl8T0j4U-W`Kpx=i<0E+0?#)!O6ppkqH# z+NpeVc0cgogSadK0yZe7k``Bv4qqsb7_;KC(;i^;X zA&RaxSql(zd8+SmdGeCf@_F3Yldh1~GtSgvM$vFp0>0n9bXST=a@?P=#Rp=6^(_yVF!tYZ z>zWjyYd#P>tVhax5jrO1rnbXr_WAg&idTHN!ScIJ@m_N9902d;mAIY%|9G2_3~& z;!wcse?ttJ`8Zbil&rG)!z}Ce^rP)gMUu`Cg)VPfOhpVy_H~CZI;T$Wl}%j|g7^7* zLa}l)jH+OUlD1Hj{hj4PYM$`DI~oO=rmNv{8#rEFD4?S92lNgp?mM|1Qr;?$z8jrz z-eZOFU`XA)ocCF)G+uo0NH@%-1ujAiQ4ZWo2V z;si7En-sjR@FImW9fg8rb@U3FO487%_$g2}-xM1uBMJJ6yzTRT5hBdR6*N;!85yf# z=yq;p*C+WcMFxQVh{Iq3sj@ zqRe={I51;vX96&{pF{vv6`cYcDmc0#A!y)^`D-@D!-c}*5j_9N8&gMIq-HHy6~||H zs>jUOih(MRR*O=DIy{r7A|1{M*P@KO^{v+o23>nz)_I^2^g*LAB|)EuReh+`K4h&Z zd^v-%lYj4eOP?+9j!rW;_N%rLfw#|U)6Rh;_u6`JVysLeAU=N>y;rBgqmY#f>aOp) zOxRk)IISJ9ahBo6&Zj@;J5i&tUuIT)I*z+T%THm@-*EL|Z1$%}EcmAqj*#E(1C&Q! zq+i(#)={*vlS>D8q|Mkd^U3>oE_jLDauUc|;?WKxkBJqiQqOUa8O-837fKT%N2!4C zLMf$pdcV!+;fJcP?aX}BsxX$GJ=FPVqg1H1G$XVDV>hG`T> z(iIpf7PUS|PZYRDOu9^uarHylD?XT#e4r{>Qfe_UHRx^T%o)G`h|Cn}X;00yi4a5gWw5}Svl`JbQ+9eO%F94VcU+EA zJ-PX*ny?!^itvLr`qwC8c%|w1(^Z^nL;a*us0*>Ou8HR!qsHHqL(D%K8A9qd&>2m? zX3ax_<6edw1-G>`A1 zt5c^IL`5tnE$Cc9#$(5FWZmlf49ME+wb@c+w%P{0=UEnu(0M~8h?f3gGCnbRD}$@3 zUFzghnJ6h>^_JQ=Rk!r!m8ADERH;Ok??0B-DfO+a#Bt?4dzePZkNLr85$s}8w(=)v zK=6ETYob;FH>-IzGq?deDTVhHk5XW8QhG)wAEXnFM95#Sqptih{$#KRceT>*VWq6P zk0EZLKPObYY4!mu2mFhzKo95g8F;KT#g``CKyGA}h(iK5_w5z;qcyo4xjpJKE)(fe~U!^KRJou(FDN4=UJELy}F zZ#?E8nb;AX3d>kt-GZO)l!M52`6%9?s%QZg?)GsElvHF0p%PTx0nH7l1SMCXBHPcY zt$@Kh^SlU*1Jw75_1@}5sCl5sB_~g40n*dbJA+w0cc3tA1)U|g$ll4k!@ zv3*_dB5bNp*^)3R8UOZ)IRj##ZtL#3?*8q84X@nja`ydmy-fL#7!Z!g8y?kzZ#uP$ zR{UGL+$j>!psg0gc;eoLSq$fQ2V)QL;=oHtvXAbI!aghhI(AIegh>O{Vh1TfgYwx` z5zgB0 z%l{G5m5PxqPm);V#7Xyx5i>$Cu{6AW( z?4pMIM1T1RvcB~rx?acR>I3uV*|*k9?}}$+i>-zKbaUqEekPhynbHC47LBIi&u%=W zozcXSCSl;H`HAel(~yI7&qp0?i1Fr1=@FsZ-`!yCtIsocb{pwt<`R0=j4zhvVB=`! zeH^{YBx~D(SFe_2q{y%cFaj7-svoUR&MMS?+mL6Ysr6KHkYP0Zj{8>86&S4;#NbnoM`nck5pngEJc{ zP&l^6MwK&7P~VM?1JGO4T%cBEL3qFoRSjG?C+1JJ}P>>}{?kH&L};>8OY z3qD0UE*v}oQd;G~-fXvk$T}F+AIvsGx~MolR40%0c`5UQvr=*1MV$P70TM5XL?lj# zp2v#$Mf#VFh#GO0T(e>G--Mc|p)QZEqO;UFC*U9HJPnD(Q?EeP=LeGDIn}2I)EO7L zBM&Y4wS&}xFc_L`B<5c3?`irKNc*Wa!bw$=8KkYCLw2Kc7D|UI=;CX1mM#uLlc4Sv_fxX2A~cb9Gww66^4C z`t-mm%4&gOcb4ld!Mgd{ZfIpgkFA(PR5X%8?k;VJ_-AcYIl?*d@;w7$LxeJi`Al8Y zj038h+v1RQ@5Nix_T(bYYk*nJ=ufA{iLjPDIu}hw3V7YwFI9QB4U7A%N~52LJWnY% z^5x%J=f|Lc3Bxl~h$lzTMOU;vRJt`|(m#K1A_qU+9q!*Du^fmvY>aR~hp%YO0;xKFxBNv)?YJp4}RubLQm+9B3+XQ%MF>Q50pur2uSH0X5$(3Ml;&n*oFP8KpXw0m z$M;&MaASjqBs})`0$X#eQvXok@q6?;x!C928d;s?s{`=87CRWtT#JpNyOon=5(-M07lCZs#0yE`SMQM$Xk zK~lP73rLF6Dbj*;NH<8Qgi@lC(y(dn+Te5UIq!S#<%96WHP@Ok<`}>6A9KFOjOgf= zs^YogRZCkY(2jG#{Ml~2;+@@Anmojqc|Lo2brZotw^2luOz2qwsFx%*dRt4WZ`OdN!RUo$& za9ekaz1;`TPas(K3UOI4@r1$4Ss$XjLr7}}6hW*__ad+tzDAnG^g^~%><i)v|=3cm(r{mW^HSYFS(fKDW#R(h{j& zTATws9x$3JKJtc))E0F`)F(0e9ISr3T%3n2$&7 zSpkgR{Ndz))Kj=%(+je4M%U#&47ZLkY;kJ5DquV8=Gl=G_fdQ_C7Eq#<-qb&Kf-eY z-)KNoZ*Fdhbnnu!4&osH)oOyN=g8Yo?CnJ$VZo?$RC3q$$Fe+}MZ5t%2vz<6M1no_ z0TTR*w+4z#za0F{eX?vfxInSSW-cJjj2~F@qB2*sB#B1wpv5fFij0n7&fG9@vyrT9 z!6M$d4=&yJ`~*`L=4#Ia%eLlk%)QiXzK~6Vu_rNo0sny?ah`=xQQsDLV)`d(#BOCHf+8>#|ELOsu=RbFz6OeMG`VCwjcxk}ChkS#v|DM<5 ze`9z21AE^*7isUk|7TA$-UJ&YVG!SCnWE`_@53;c_g*E^yfwd}$M8ZCWkeWu$5Z57 z_kZv6rkd-m$>Hae1~W2bap`8JZL5W1)bnjs0I`nj;o%}%^GfQR5^w3ip<>yBbgNx* z6Q2 zY`AJo#so*VTOnD<3e}WhL!s2h1AD`?{d`c3X7domYzb>`IljrJwc%+n5)y%~no~D_ zNW|CG*g$?G;!TfVBg({?jRT+Z8v6!6}T14)M{r|=Ww1K!qD!+6Bh z@F30}p5Ui+a^ZUVLEHx1sIM;cYQ`_sH41}f4!}pOqgnq@+jXd-Z7-i1BECt=0Mqn4 z6n2+_J(E``fs?xwpKvds#>Q^axRa#(?p3pj8Sj4Va4L03)-9xdQFVI zuFb!HGOoAT7}%ZBlJ8^{HY;Jqs{#-Jz}n0A)z=N)O9FDst`L{sysrp?z63E2r`})v@IZqieEt+-k&7xlIpsBOWaEiTN(<~G!B^L z8ooETS3$a!DrihOI7h|mXL-|?iqm(MKx!M&hA0S`4Y+oRXT!o?U6)kJ0|!6ejYq(9 ztFa?S-$eO%9Pr_$3aUF?ZBH7YP6`SEiB(W84 zXZ)+wr^{W*Ui4t)8ZvSF0k{Zc$rZ;88uJed^!=9xrb+vv{i;(cexBJUfE@azV2wRS zP830{2<-v%mwJE7w+Zuu$78ouYo4vabqY^Z*xTiT$SofSp{TB9zupg}NTa6mBUTPZ zn##U zMi8D9r(s&Vbj^3InA>#wT>to*Aoy-sD{XL^yh+2nY>ZUXZp9ejs}8+jjcM{C7Z`Ka=` zkJO#Y5)vH295zdPq{^pKmcY+EH$5dngf%iQ;HspS@A*L>6JU}&4R_+Z5e2+}e9YK; zdQej+!>65q&pHis;6C`8;0bD?S9aM+$nfUl#QJ8U_loWK@g_ZAF@OS5T`uep=BQ2L zwQ%Zw9ig!-uIythZHacZWy3A{r|uX7HI-d2j{fM3Ukv$jJ5G^yiA{;Jy*O4ny5h^t z);BImai-@|K+hLmPuBjJ*Z}pE&xOwv?+G1E88Cd{q|8qZAnTERjm#wyoVhkbbJn?K8c{{5O=ERB z06vaMMj$iWx7Hwb0ExC!me7dofsociDzrsuZPz|drxOBl=WUmKg(%v{61k17^%VAhbGOH7zEqk`)^)4JbajVoetH^l zl~*K@e%6vOX*)DhNb%*lx_h6;E_>XHs^eF_-nb@gGXT+I`;ol>Z%s z+K95AcFoZE@8ggOdJqd2%dVj_HZ_Tb7Qe#kDtXiH+R-s}26Aw7{U$~xri-?*yae7b zA==&uuW|zuxvyBhRGGCNaI2^h*|(S!QbbGx&Vy0RB+mbguC9(wCBF<1%6!Zricod8 zFHxfXu)KeKC27dI-J)Zi&wS!sDuG3w4$R8-8f;Rs zdDQGE)lOBAPLqAYFgh3z5fkIfKaA4bjFr@ zZ+G<-MiiW~e@r}5>Lh?4g%I|*VOpCrGy6()MRdj87tKiawywpSq$6pyee)`df!M6M z4OtawEzHj~d~Cb+^M$QI)x2VOo(>f#Q6wduFi`uZr)q%W!!QI3W~Pi^p`JoNX!|EV zd17&4`AIDOQ??KBjb&hA=5vNSA&iA&VSC0u+PexD@ckV4uZbWdvQvEag(va(z(a-N zi^@)Xhfc6Q{MHj>Cp2}i$5MCHi-u9e2CeP^j;0xyvEMB%Y?G<5cZ+UoXK5?@qq(!X zeT;M5J8VNrATu5xY3j1-r_S9#G4wV&PEzN>A9<_9U*4r3!7CE8*9HFUS_-LS4OXfO5MBUEX+NrbEjA#0Ur6 zf4tBu8@LZ`U=esT%tbIz^Sn$vW=|}U5kJDx4;+6CC18$OA+>?8-5h>^uW!b2TqzIo4$%iD zd+Nnyn$BGI?dP?CkKLZwE+P?npNw%($f#0Zf=X*Pl1{vvfwM5!~8x5gsLe zb(yd=13>1%hO*)K9v9aNC}VJj4|3-U_}c2jd+Dx444^^G=sTn=*o3L5NZxvG^E|Ct z3P{S& zm8lS1@`#J1qEbzqNZCKGh6l)Uyn$cqaDb%}+FruDl1a$1e&ROdaf!a%+3J^KY&UnQ z^9%wI!_VIYg>l*E76!b=@t{qlRen&1?6mvURWgQ|h+Y(|ar3Hs-OPd_{+>9KpD9?K z=4xWiT~cVf8Q#tZfg;Gn)qY29@#ElF$MQRu`M)5&A(KgzOklFkbHJdELxLo%sKfue zBWwvsJ}6phBCnPV>y-VY{x08g1=T0-MXyxRG15cdSlXId$%))v8^6dL5bg+Mm$D3w zoUjdwoRH6S?R#}xfTa2VBtFc}JcwcXz7y~5pff7%(2qyJaF9KESZP@7)-hsg>hvA+ ze^|U%nA4rnW0Nr6WpiR1D8y1OH^$L!<&Cil@UI7OuSzn=04iW0sdA@X1d!ou%e51B zP@xXT3+0fR#CugH=0j$nrrsHJrY|(Way--ZFMwWBVL7|{bIrn%Rk*YGkK$1&ZSx9f zON{IOyQ%+vcRf?u-TFsmC^q|G+NUz6@1g)QXHDZ*!0IP{z1b&sR32Wd37?fq78&}2 z940H$PRn>78vcS?vIYmpLN)2==Xh6d8sz})=>+}=TU)|=gT?TZyAc04V5Ef*ZWS4T zRl1N=sBjV-78k=(%_8dgY*tphAFrBn$50_ay9QkS>5njd(&zEAlM3q+i#yphBGwt0 zg$6xDZ0y8mgx1Lym@c#LA2b_6x>uRwluMAt>Db4*G_V$3ZI94_!Xd8rQ zLP-wnIznB&JsZ?lZ2C)D5wqXofjVdFE33By4of|XocBJwx1(kf2GzKffuiCHx$hP9RYf={v0l2&?$dbt)%(f~c@VWys8o-`$>v5rCyI{P$j zMk%jSc*8@<|5UNF@Nr&+^eX8-t#w9ffoh;N^^;qu_<`hh(6Pgxe=+HXCeC6TTb3W< zf-zzoo|{`x+_Pel$nV+qJ}CQtB2(4S?ZJq_kkSblbvDZFrZfn8;;qN_S;?Mz1@_ww#vk}j42N#OVNn)pkjMYEA zqxEu^cGZ-RztteIuIKQHtDC<5Re8;*<-fn~jgg*^baPyRVAqn# zmZVOK#HE4@@r8fBm(X-P4a&&QMUhmeGB|C(#;@pJOkHP3c#hO5*zWoHnmmfWV~Rv^TmU5hC|7?xD`wvR4il>)N(VKV56 zS(Sp9La!3|uwMJIw61X`^uo#I)FYU_+qRPZSamIMc>iWZts+k!nIE~;i1#O{qK+aJ zNB&|U!iSCK#NUk9hljwwwXJyS(9Ywqd!CLA4--P)8l8VME!gZxAhwe9`nZwz&FP`h zmgiQk#Q>rv)u)xb+oWlM?ee86?BR{5(4H^n!$00!?t7l|af4%~AQCzL=ufN*);GTS zyWRFa;aeW;44pkp!U>jJ3X3IKlTb#CFEbAnAf#)H&NkFBpKk6$CYcy&FHC(ydy+=P z6vt)*NVsFQ?A1KGwzZjrA567=RvFJtzA$qQw^;e9OL-Lg<*v4Vspe+3ByJ^-LXrPvG4asj9isqwZO>(9)`R z^r0|ylK%7mr|xe0D~I@pjQuNr`dy^I5&BXXn_SGepqpcDaAY>PXX6;o>c)@SN`?m0 zZj8pSp8DJi147^(YOb7~L(wBjulr61C?=lUjbA7wt=6_<{Buq&v)SR;P)KE7%gnT$ zTZMn6Q6yK(<9{MM)7p5TEzceF0$u9&+DmhG3r4;rRYN@{loPm+yIq09U)vkp&l)0& z&Sq|)6%*G~R=$|MM8TSbcCfxs;L)Y6IzB;FB4@yNazE^LBo*jHL6K8>e0GUWj0kc2 z7HYxf8wA0|*S6?s++RzkvR_?T;v_1~t&qAsn2S5UqyC6Ji~M!p*Wh(<0qSwIKVE6H zc@2$X8#ccSjz))y><{W2BHP#Maa=K1MPB^Q6zl3K<4RtA z_bQTnmHf+19XjNNbU@P0hVWcD9}sj?zY_O2R)}3$dL&M-?`|4&(QpCcA2^Un;?slL z#EPvJi$?2i1ltQ2{|6rD4bt6sEH`$+NVgtP=9^brABd(J6(}pUWsdB3ug~rlqW2=K zNP6@fxbNeu(bo4HX@Y)zSGhr`Gj|FgfrsVe_s>G@Mby3bpbR3_k7;^`K-; z-pD@u7;GAwe)#tAXqSj?6vIXh<^~U<{>_~8{Sym}5E9Io56JFBcyVc@JmU+N2V~ng z8Q%NXih^^b;SnCc1e`Npq%=963Ij?QsweE3PUTFwHwiDvurEJdaCO0iH-52avUPpD z!X+Lt5e>Ne9pu*5@4lW?Ja7eHp3 zm}uLL|Lk*vtMVUZE!0sIyjCTQ)c433V9ZTuU2Bp*F@Feildrh|VPQr}LL|HX>xKT< zp^x*``UVnPSJH;+oTlp>&6U$reQ>Xq7HtKl=UhvP1**`2`+H?8bIg(B~!>8+0)rO=OCcoE{Z@ zaDnlcodU^j8(5iuSZ&P-Py6GPMAb}@sU!M|T|+>zojx96COz1Qzp{q|MT_gHH5na0 zQ<>FXGe(elZ<-W*o%yyV=c<~?KKM8srCUliJ*BG!VKsdAEl%@K#o8d<8OCapK-`_v zKbsK{wKicqYLlUwH?+z$AltU^+6Tm#3xwP-LFzJ@QNw9PMx_#F8KpLP8eZ_H7+BcRk!1}@dv_a zzCn?M(+xz#3b|{x^zA@>ldSF7WNnd5L1U175I3e1M}yaw8(*c29&Da{@^_T_kmqhg zHk?nZ%*mx>``4#ye-H1r@cd1w{l)TtMCh|YmKd##keKy%&go{U-FYe#Jmf;Bh0ip4 zUkChF&gn!5un#90=@#Lng!hn^wxpU%ncn<@_LK_1og8<(lu;7Z28wvL z!oEVaH;@AXW!xqdyG;{->@(#2?yhKW+56^9)6Q7pp0ItXyuf)JVRBoWO7kKVxE@MU zEW{c^LY(sWMsi73mdaWYLFcR1np2QiJlUvBe>-W9(jUogV)$y>*&?aB;gTa)n6NrxIzkJzF`#FxS%kalVc*`7GtXgnbcO zgK6v0`{Q~0L6!UpOV$t%B1CimBeMAYr17HW+(dw&ZsuF&QejFny`&ZLP3DuGbul7v z(DG>fEQzSm746S0rU(&oNMlM{`1Vx5?)f(xx}uCTubZ_h5`rkZhD`#%1y|SYFN6t^ zf4b@=wr^aQ=(_C??Mw8(Db_5|Q&+| zxRm`OX??weibcjDd2AnA?q=$xqbg0mj|iq?1zUpmF-bJy7Z+N2bK&2V@6FV-Iv;e> z0}uKgvVVdjBN>p&iZtcFXE$;etb@CPu%b(AbqA%+$1Hj3)J^_ymU}RrH7P-_5M1-m@3@! z?-&Z_|D35o=U>siG~Pr@#Eh$P{*GwJu`N%_@sco?1&ACGfT{ipGrYs~EE1z~{pN#q4UWU% z^P?T2mIFnf=1h}B+lT~v`Sy=b;rd>VN;CWTztuY^l@GM%AROqWkw>nQ`KXm9s+4Qb zidGeLr`+%hQ$%dZ}^hXo$+V>u(e z8KY8(Bq6rf8cwEUX2PqNg0H~+=yQ}$DkXA%Xv)P?Cg5}gkezSIW{Cw5m0?8EuLA>x zP#rD-_unyaRw3W27^pc^A68~!tk8It1A?tP$I_0RWxMk|(lZ%GkT8^{3+zr+MyXjx3Z(M}UJ7&$8M z{+B|YlHmx9>i%^=4mLxo~MuM2D-Y(i~hzhHyT(qG-xC z-$d{&rS2e;$)bwd5-Z*S`8AwGXRGym16|Vv_sP1`(ENi;b~4bS|3T~*7Q0pUPa4RB zx$X01h6dS<7}nFln zNl3N-h+@&WqeBM7xPo*=8byt~n(>>)vnc_$vSfPoKD7aO$-vLH`)x%VqXaP7W(;7m z(B>BYwdNLaKhfop z83!3P>wiQ6p)5AwlTS`a+uH}LgErwikEvAw+!nRCK>J4&3^bUJqzz!MS5&1R2YiT7 zc@6~=js+8923o{_yhi|L`WuSB^}!^h)vW`TH=@~oCx=pv&grlh19gM*e)rE#TMNVl zfkO69e+})0;DSDBr)(rIu??-eQEVK3@^5WuxD;mN)w-_*G>oBemvJfo3UE9Ti$$IZqX^&&Zh@m*GdM`N=27I#yTFwqL%7%W!eJIo! zgRMfw*}r{dCH;2MAMV-DLsz|sp%g*vOW9yUaNOi$gmnKh|NN6bws!|lq4(NJT726TI57Yu|6JwS JCn>YA{{oaBUzz{_ literal 0 HcmV?d00001 From 11794c8384890dd50a5efb5372947944353ef507 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:08:29 -0500 Subject: [PATCH 03/12] Rename schedules/docs/img to schedules/docs/images --- openedx/core/djangoapps/schedules/docs/README.rst | 2 +- .../docs/{img => images}/system_diagram.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename openedx/core/djangoapps/schedules/docs/{img => images}/system_diagram.png (100%) diff --git a/openedx/core/djangoapps/schedules/docs/README.rst b/openedx/core/djangoapps/schedules/docs/README.rst index 34155ba12a..ef24ffe533 100644 --- a/openedx/core/djangoapps/schedules/docs/README.rst +++ b/openedx/core/djangoapps/schedules/docs/README.rst @@ -108,7 +108,7 @@ Glossary An Overview of edX's Dynamic Pacing System ------------------------------------------ -.. image:: img/system_diagram.png +.. image:: images/system_diagram.png Running the Management Commands diff --git a/openedx/core/djangoapps/schedules/docs/img/system_diagram.png b/openedx/core/djangoapps/schedules/docs/images/system_diagram.png similarity index 100% rename from openedx/core/djangoapps/schedules/docs/img/system_diagram.png rename to openedx/core/djangoapps/schedules/docs/images/system_diagram.png From c2fc546db9450911ec96bfbfb6afc5d827306321 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:07:15 -0500 Subject: [PATCH 04/12] Support for Django App Plugins --- openedx/core/djangolib/django_plugins.py | 347 +++++++++++++++++++++++ openedx/core/lib/plugins.py | 29 +- 2 files changed, 362 insertions(+), 14 deletions(-) create mode 100644 openedx/core/djangolib/django_plugins.py diff --git a/openedx/core/djangolib/django_plugins.py b/openedx/core/djangolib/django_plugins.py new file mode 100644 index 0000000000..9c18fa78e0 --- /dev/null +++ b/openedx/core/djangolib/django_plugins.py @@ -0,0 +1,347 @@ +""" +Provides functionality to enable improved plugin support of Django apps. + +Once a Django project is enhanced with this functionality, any participating +Django app (a.k.a. Plugin App) that is PIP-installed on the system is +automatically included in the Django project's INSTALLED_APPS list. In addition, +the participating Django app's URLs and Settings are automatically recognized by +the Django project. + +While Django+Python already support dynamic installation of components/apps, +they do not have out-of-the-box support for plugin apps that auto-install +into a containing Django project. + +This Django App Plugin functionality allows for Django-framework code to be +encapsulated within each Django app, rather than having a monolith Project that +is aware of the details of its Django apps. It is motivated by the following +design principles: + +* Single Responsibility Principle, which says "a class or module should have +one, and only one, reason to change." When code related to a single Django app +changes, there's no reason for its containing project to also change. The +encapsulation and modularity resulting from code being co-located with its +owning Django app helps prevent "God objects" that have too much responsibility +and knowledge of the details. + +* Open Closed Principle, which says "software entities should be open for +extension, but closed for modification." The edx-platform is extensible via +installation of Django apps. Having automatic Django App Plugin support allows +for this extensibility without modification to the edx-platform. Going forward, +we expect this capability to be widely used by external repos that depend on and +enhance the edx-platform without the need to modify the core platform. + +* Dependency Inversion Principle, which says "high level modules should not +depend upon low level modules." The high-level module here is the Django +project, while the participating Django app is the low-level module. For +long-term maintenance of a system, dependencies should go from low-level +modules/details to higher level ones. + + +== Django Projects == +In order to enable this functionality in a Django project, the project needs to +update: + +1. its settings to extend its INSTALLED_APPS to include the Plugin Apps: + INSTALLED_APPS.extend(DjangoAppRegistry.get_plugin_apps(...)) + +2. its settings to add all Plugin Settings: + DjangoAppRegistry.add_plugin_settings(__name__, ...) + +3. its urls to add all Plugin URLs: + urlpatterns.extend(DjangoAppRegistry.get_plugin_url_patterns(...)) + + +== Plugin Apps == +In order to make use of this functionality, plugin apps need to: + +1. create an AppConfig class in their apps module, as described in +https://docs.djangoproject.com/en/2.0/ref/applications/#django.apps.AppConfig. + +2. add their AppConfig class to the appropriate entry point in their setup.py +file: + + from setuptools import setup + setup( + ... + entry_points={ + "lms.djangoapp": [ + "my_app = full_python_path.my_app.apps:MyAppConfig", + ], + "cms.djangoapp": [ + ], + } + ) + +3. configure the Plugin App in their AppConfig class: + + from django.apps import AppConfig + from openedx.core.djangolib.django_plugins import ( + ProjectType, SettingsType, PluginURLs, PluginSettings + ) + class MyAppConfig(AppConfig): + name = u'full_python_path.my_app' + + # Class attribute that configures and enables this app as a Plugin App. + plugin_app = { + + # Configuration setting for Plugin URLs for this app. + PluginURLs.CONFIG: { + + # Configure the Plugin URLs for each project type, as needed. + ProjectType.LMS: { + + # The namespace to provide to django's urls.include, per + # https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces + PluginURLs.NAMESPACE: u'my_app', + + # The regex to provide to django's urls.url. + PluginURLs.REGEX: u'api/my_app/', + + # The python path (relative to this app) to the URLs module + # to be plugged into the project. + PluginURLs.RELATIVE_PATH: u'api.urls', + } + }, + + + # Configuration setting for Plugin Settings for this app. + PluginSettings.CONFIG: { + + # Configure the Plugin Settings for each Project Type, as + # needed. + ProjectType.LMS: { + + # Configure each Settings Type, as needed. + SettingsType.AWS: { + # The python path (relative to this app) to the settings + # module for the relevant Project Type and Settings + # Type. + PluginSettings.RELATIVE_PATH: u'settings.aws', + }, + SettingsType.COMMON: { + PluginSettings.RELATIVE_PATH: u'settings.common', + }, + } + } + } + +OR use string constants when you cannot import from django_plugins. + + from django.apps import AppConfig + class MyAppConfig(AppConfig): + name = u'full_python_path.my_app' + + plugin_app = { + u'url_config': { + u'lms.djangoapp': { + u'namespace': u'my_app', + u'regex': u'api/my_app/', + u'relative_path': u'api.urls', + } + }, + u'settings_config': { + u'lms.djangoapp': { + u'aws': { relative_path: u'settings.aws' }, + u'common': { relative_path: u'settings.common'}, + } + } + } + +4. For Plugin Settings, insert the following function into each of the plugin +settings modules: + def plugin_settings(settings): + # Update the provided settings module with any app-specific settings. + # For example: + # settings.FEATURES['ENABLE_MY_APP'] = True + # settings.MY_APP_POLICY = 'foo' + +""" +from importlib import import_module +from django.conf.urls import include, url +from logging import getLogger +from openedx.core.lib.plugins import PluginManager + + +log = getLogger(__name__) + + +# Name of the class attribute to put in the AppConfig class of the Plugin App. +PLUGIN_APP_CLASS_ATTRIBUTE_NAME = u'plugin_app' + + +# Name of the function that belongs in the plugin Django app's settings file. +# The function should be defined as: +# def plugin_settings(settings): +# # enter code that should be injected into the given settings module. +PLUGIN_APP_SETTINGS_FUNC_NAME = u'plugin_settings' + + +class ProjectType(object): + """ + The ProjectType enum defines the possible values for the Django Projects + that are available in the edx-platform. Plugin apps use these values to + declare explicitly which projects they are extending. + """ + LMS = u'lms.djangoapp' + CMS = u'cms.djangoapp' + + +class SettingsType(object): + """ + The SettingsType enum defines the possible values for the settings files + that are available for extension in the edx-platform. Plugin apps use these + values (in addition to ProjectType) to declare explicitly which settings + (in the specified project) they are extending. + + See https://github.com/edx/edx-platform/master/lms/envs/docs/README.rst for + further information on each Settings Type. + """ + AWS = u'aws' + COMMON = u'common' + DEVSTACK = u'devstack' + TEST = u'test' + + +class PluginSettings(object): + """ + The PluginSettings enum defines dictionary field names (and defaults) + that can be specified by a Plugin App in order to configure the settings + that are injected into the project. + """ + CONFIG = u'settings_config' + RELATIVE_PATH = u'relative_path' + DEFAULT_RELATIVE_PATH = u'settings' + + +class PluginURLs(object): + """ + The PluginURLs enum defines dictionary field names (and defaults) that can + be specified by a Plugin App in order to configure the URLs that are + injected into the project. + """ + CONFIG = u'url_config' + APP_NAME = u'app_name' + NAMESPACE = u'namespace' + REGEX = u'regex' + RELATIVE_PATH = u'relative_path' + DEFAULT_RELATIVE_PATH = u'urls' + + +class DjangoAppRegistry(PluginManager): + """ + The DjangoAppRegistry class encapsulates the functionality to enable + improved plugin support of Django apps. + """ + + @classmethod + def get_plugin_apps(cls, project_type): + """ + Returns a list of all registered Plugin Apps, expected to be added to + the INSTALLED_APPS list for the given project_type. + """ + plugin_apps = [ + u'{module_name}.{class_name}'.format( + module_name=app_config.__module__, + class_name=app_config.__name__, + ) + for app_config in cls._get_app_configs(project_type) + if getattr(app_config, PLUGIN_APP_CLASS_ATTRIBUTE_NAME, None) is not None + ] + log.info(u'Plugin Apps: Found %s', plugin_apps) + return plugin_apps + + @classmethod + def add_plugin_settings(cls, settings_path, project_type, settings_type): + """ + Updates the module at the given ``settings_path`` with all Plugin + Settings appropriate for the given project_type and settings_type. + """ + settings_module = import_module(settings_path) + for plugin_settings in cls._iter_plugin_settings(project_type, settings_type): + settings_func = getattr(plugin_settings, PLUGIN_APP_SETTINGS_FUNC_NAME) + settings_func(settings_module) + + @classmethod + def get_plugin_url_patterns(cls, project_type): + """ + Returns a list of all registered Plugin URLs, expected to be added to + the URL patterns for the given project_type. + """ + return [ + url( + url_config.get(PluginURLs.REGEX, r''), + include( + url_module_path, + app_name=url_config.get(PluginURLs.APP_NAME), + namespace=url_config[PluginURLs.NAMESPACE], + ), + ) + for url_module_path, url_config in cls._iter_installable_urls(project_type) + ] + + @classmethod + def _iter_plugin_settings(cls, project_type, settings_type): + """ + Yields Plugin Settings modules that are registered for the given + project_type and settings_type. + """ + for app_config in cls._get_app_configs(project_type): + settings_config = _get_settings_config(app_config, project_type, settings_type) + if settings_config is None: + log.info( + u'Plugin Apps [Settings]: Did NOT find %s for %s and %s', + app_config.name, + project_type, + settings_type, + ) + continue + + plugin_settings_path = _get_module_path(app_config, settings_config, PluginSettings) + log.info(u'Plugin Apps [Settings]: Found %s for %s and %s', app_config.name, project_type, settings_type) + yield import_module(plugin_settings_path) + + @classmethod + def _iter_installable_urls(cls, project_type): + """ + Yields the module path and configuration for Plugin URLs registered for + the given project_type. + """ + for app_config in cls._get_app_configs(project_type): + url_config = _get_url_config(app_config, project_type) + if url_config is None: + log.info(u'Plugin Apps [URLs]: Did NOT find %s for %s', app_config.name, project_type) + continue + + urls_module_path = _get_module_path(app_config, url_config, PluginURLs) + url_config[PluginURLs.NAMESPACE] = url_config.get(PluginURLs.NAMESPACE, app_config.name) + log.info( + u'Plugin Apps [URLs]: Found %s with namespace %s for %s', + app_config.name, + url_config[PluginURLs.NAMESPACE], + project_type, + ) + yield urls_module_path, url_config + + @classmethod + def _get_app_configs(cls, project_type): + return cls.get_available_plugins(project_type).itervalues() + + +def _get_module_path(app_config, plugin_config, plugin_cls): + return u'{package_path}.{module_path}'.format( + package_path=app_config.name, + module_path=plugin_config.get(plugin_cls.RELATIVE_PATH, plugin_cls.DEFAULT_RELATIVE_PATH), + ) + + +def _get_settings_config(app_config, project_type, settings_type): + plugin_config = getattr(app_config, PLUGIN_APP_CLASS_ATTRIBUTE_NAME, {}) + settings_config = plugin_config.get(PluginSettings.CONFIG, {}) + project_type_settings = settings_config.get(project_type, {}) + return project_type_settings.get(settings_type) + + +def _get_url_config(app_config, project_type): + plugin_config = getattr(app_config, PLUGIN_APP_CLASS_ATTRIBUTE_NAME, {}) + url_config = plugin_config.get(PluginURLs.CONFIG, {}) + return url_config.get(project_type) diff --git a/openedx/core/lib/plugins.py b/openedx/core/lib/plugins.py index 576dc9cec5..6447cb4f96 100644 --- a/openedx/core/lib/plugins.py +++ b/openedx/core/lib/plugins.py @@ -1,45 +1,46 @@ """ -Adds support for first class features that can be added to the edX platform. +Adds support for first class plugins that can be added to the edX platform. """ +from collections import OrderedDict from stevedore.extension import ExtensionManager +from openedx.core.lib.cache_utils import memoized class PluginError(Exception): """ - Base Exception for when an error was found regarding features. + Base Exception for when an error was found regarding plugins. """ pass class PluginManager(object): """ - Base class that manages plugins to the edX platform. + Base class that manages plugins for the edX platform. """ @classmethod - def get_available_plugins(cls): + @memoized + def get_available_plugins(cls, namespace=None): """ Returns a dict of all the plugins that have been made available through the platform. """ # Note: we're creating the extension manager lazily to ensure that the Python path # has been correctly set up. Trying to create this statically will fail, unfortunately. - if not hasattr(cls, "_plugins"): - plugins = {} - extension_manager = ExtensionManager(namespace=cls.NAMESPACE) # pylint: disable=no-member - for plugin_name in extension_manager.names(): - plugins[plugin_name] = extension_manager[plugin_name].plugin - cls._plugins = plugins - return cls._plugins + plugins = OrderedDict() + extension_manager = ExtensionManager(namespace=namespace or cls.NAMESPACE) # pylint: disable=no-member + for plugin_name in extension_manager.names(): + plugins[plugin_name] = extension_manager[plugin_name].plugin + return plugins @classmethod - def get_plugin(cls, name): + def get_plugin(cls, name, namespace=None): """ Returns the plugin with the given name. """ - plugins = cls.get_available_plugins() + plugins = cls.get_available_plugins(namespace) if name not in plugins: raise PluginError("No such plugin {name} for entry point {namespace}".format( name=name, - namespace=cls.NAMESPACE # pylint: disable=no-member + namespace=namespace or cls.NAMESPACE, # pylint: disable=no-member )) return plugins[name] From 24d6c314ef9e7ab982fc75b7a96b7616274c0069 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:09:07 -0500 Subject: [PATCH 05/12] Enable Django App Plugins in CMS --- cms/envs/aws.py | 6 +++++- cms/envs/common.py | 14 +++++++------- cms/envs/devstack.py | 4 ++++ cms/envs/test.py | 5 +++++ cms/urls.py | 6 +++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cms/envs/aws.py b/cms/envs/aws.py index d68d194d1a..564ce9eb90 100644 --- a/cms/envs/aws.py +++ b/cms/envs/aws.py @@ -36,7 +36,6 @@ CONFIG_ROOT = path(os.environ.get('CONFIG_ROOT', ENV_ROOT)) # prefix. CONFIG_PREFIX = SERVICE_VARIANT + "." if SERVICE_VARIANT else "" - ############### ALWAYS THE SAME ################################ DEBUG = False @@ -561,6 +560,11 @@ COMPLETION_VIDEO_COMPLETE_PERCENTAGE = ENV_TOKENS.get( COMPLETION_VIDEO_COMPLETE_PERCENTAGE, ) +####################### Plugin Settings ########################## + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.CMS, SettingsType.AWS) + ########################## Derive Any Derived Settings ####################### derive_settings(__name__) diff --git a/cms/envs/common.py b/cms/envs/common.py index ec796329fc..efe84ee5e4 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -1008,9 +1008,6 @@ INSTALLED_APPS = [ 'require', 'webpack_loader', - # Theming - 'openedx.core.djangoapps.theming.apps.ThemingConfig', - # Site configuration for theming and behavioral modification 'openedx.core.djangoapps.site_configuration', @@ -1123,10 +1120,6 @@ INSTALLED_APPS = [ # Waffle related utilities 'openedx.core.djangoapps.waffle_utils', - # Dynamic schedules - 'openedx.core.djangoapps.ace_common.apps.AceCommonConfig', - 'openedx.core.djangoapps.schedules.apps.SchedulesConfig', - # DRF filters 'django_filters', 'cms.djangoapps.api', @@ -1504,3 +1497,10 @@ ZENDESK_CUSTOM_FIELDS = {} # Once a user has watched this percentage of a video, mark it as complete: # (0.0 = 0%, 1.0 = 100%) COMPLETION_VIDEO_COMPLETE_PERCENTAGE = 0.95 + + +############## Installed Django Apps ######################### + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +INSTALLED_APPS.extend(DjangoAppRegistry.get_plugin_apps(ProjectType.CMS)) +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.CMS, SettingsType.COMMON) diff --git a/cms/envs/devstack.py b/cms/envs/devstack.py index b49f40631c..78b83ab947 100644 --- a/cms/envs/devstack.py +++ b/cms/envs/devstack.py @@ -143,6 +143,10 @@ JWT_AUTH.update({ 'JWT_AUDIENCE': 'lms-key', }) +##################################################################### +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.CMS, SettingsType.DEVSTACK) + ############################################################################### # See if the developer has any local overrides. if os.path.isfile(join(dirname(abspath(__file__)), 'private.py')): diff --git a/cms/envs/test.py b/cms/envs/test.py index 166af8268c..9abe6e0e07 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -353,6 +353,11 @@ VIDEO_TRANSCRIPTS_SETTINGS = dict( DIRECTORY_PREFIX='video-transcripts/', ) +####################### Plugin Settings ########################## + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.CMS, SettingsType.TEST) + ########################## Derive Any Derived Settings ####################### derive_settings(__name__) diff --git a/cms/urls.py b/cms/urls.py index 28becfbffe..d2e7913b1e 100644 --- a/cms/urls.py +++ b/cms/urls.py @@ -62,9 +62,6 @@ urlpatterns = [ # Darklang View to change the preview language (or dark language) url(r'^update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')), - # URLs for managing theming - url(r'^theming/', include('openedx.core.djangoapps.theming.urls', namespace='theming')), - # For redirecting to help pages. url(r'^help_token/', include('help_tokens.urls')), url(r'^api/', include('cms.djangoapps.api.urls', namespace='api')), @@ -255,3 +252,6 @@ urlpatterns += [ url(r'^404$', handler404), url(r'^500$', handler500), ] + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType +urlpatterns.extend(DjangoAppRegistry.get_plugin_url_patterns(ProjectType.CMS)) From 7490cd93aba4e879cad60e17e1718794467b6198 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:11:27 -0500 Subject: [PATCH 06/12] Enable Django App Plugins in LMS --- lms/envs/aws.py | 24 ++++++------------------ lms/envs/common.py | 34 ++++++---------------------------- lms/envs/devstack.py | 18 +++--------------- lms/envs/test.py | 12 +++++------- lms/urls.py | 14 ++++---------- 5 files changed, 24 insertions(+), 78 deletions(-) diff --git a/lms/envs/aws.py b/lms/envs/aws.py index bf65051e9c..9c3d4a952a 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- """ -This is the default template for our main set of AWS servers. This does NOT -cover the content machines, which use content.py +This is the default template for our main set of AWS servers. Common traits: * Use memcached, and cache-backed sessions @@ -46,7 +45,6 @@ CONFIG_ROOT = path(os.environ.get('CONFIG_ROOT', ENV_ROOT)) # prefix. CONFIG_PREFIX = SERVICE_VARIANT + "." if SERVICE_VARIANT else "" - ################################ ALWAYS THE SAME ############################## DEBUG = False @@ -271,12 +269,6 @@ BULK_EMAIL_ROUTING_KEY = ENV_TOKENS.get('BULK_EMAIL_ROUTING_KEY', HIGH_PRIORITY_ # we have to reset the value here. BULK_EMAIL_ROUTING_KEY_SMALL_JOBS = ENV_TOKENS.get('BULK_EMAIL_ROUTING_KEY_SMALL_JOBS', LOW_PRIORITY_QUEUE) -# Queue to use for updating persistent grades -RECALCULATE_GRADES_ROUTING_KEY = ENV_TOKENS.get('RECALCULATE_GRADES_ROUTING_KEY', LOW_PRIORITY_QUEUE) - -# Queue to use for updating grades due to grading policy change -POLICY_CHANGE_GRADES_ROUTING_KEY = ENV_TOKENS.get('POLICY_CHANGE_GRADES_ROUTING_KEY', LOW_PRIORITY_QUEUE) - # Queue to use for expiring old entitlements ENTITLEMENTS_EXPIRATION_ROUTING_KEY = ENV_TOKENS.get('ENTITLEMENTS_EXPIRATION_ROUTING_KEY', LOW_PRIORITY_QUEUE) @@ -1075,15 +1067,6 @@ PARENTAL_CONSENT_AGE_LIMIT = ENV_TOKENS.get( PARENTAL_CONSENT_AGE_LIMIT ) -############## Settings for ACE #################################### -ACE_ENABLED_CHANNELS = ENV_TOKENS.get('ACE_ENABLED_CHANNELS', ACE_ENABLED_CHANNELS) -ACE_ENABLED_POLICIES = ENV_TOKENS.get('ACE_ENABLED_POLICIES', ACE_ENABLED_POLICIES) -ACE_CHANNEL_SAILTHRU_DEBUG = ENV_TOKENS.get('ACE_CHANNEL_SAILTHRU_DEBUG', ACE_CHANNEL_SAILTHRU_DEBUG) -ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = ENV_TOKENS.get('ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME', ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME) -ACE_CHANNEL_SAILTHRU_API_KEY = AUTH_TOKENS.get('ACE_CHANNEL_SAILTHRU_API_KEY', ACE_CHANNEL_SAILTHRU_API_KEY) -ACE_CHANNEL_SAILTHRU_API_SECRET = AUTH_TOKENS.get('ACE_CHANNEL_SAILTHRU_API_SECRET', ACE_CHANNEL_SAILTHRU_API_SECRET) -ACE_ROUTING_KEY = ENV_TOKENS.get('ACE_ROUTING_KEY', ACE_ROUTING_KEY) - # Do NOT calculate this dynamically at startup with git because it's *slow*. EDX_PLATFORM_REVISION = ENV_TOKENS.get('EDX_PLATFORM_REVISION', EDX_PLATFORM_REVISION) @@ -1101,6 +1084,11 @@ COMPLETION_VIDEO_COMPLETE_PERCENTAGE = ENV_TOKENS.get( COMPLETION_VIDEO_COMPLETE_PERCENTAGE, ) +############################### Plugin Settings ############################### + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.LMS, SettingsType.AWS) + ########################## Derive Any Derived Settings ####################### derive_settings(__name__) diff --git a/lms/envs/common.py b/lms/envs/common.py index 3220992aa6..f0c29f3f84 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2015,14 +2015,6 @@ BULK_EMAIL_LOG_SENT_EMAILS = False # parallel, and what the SES rate is. BULK_EMAIL_RETRY_DELAY_BETWEEN_SENDS = 0.02 -############################# Persistent Grades #################################### - -# Queue to use for updating persistent grades -RECALCULATE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE - -# Queue to use for updating grades due to grading policy change -POLICY_CHANGE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE - ############################# Email Opt In #################################### # Minimum age for organization-wide email opt in @@ -2105,9 +2097,6 @@ INSTALLED_APPS = [ # For content serving 'openedx.core.djangoapps.contentserver', - # Theming - 'openedx.core.djangoapps.theming.apps.ThemingConfig', - # Site configuration for theming and behavioral modification 'openedx.core.djangoapps.site_configuration', @@ -2136,7 +2125,6 @@ INSTALLED_APPS = [ 'openedx.core.djangoapps.course_groups', 'bulk_email', 'branding', - 'lms.djangoapps.grades.apps.GradesConfig', # Signals 'openedx.core.djangoapps.signals.apps.SignalConfig', @@ -2344,8 +2332,6 @@ INSTALLED_APPS = [ 'database_fixups', 'openedx.core.djangoapps.waffle_utils', - 'openedx.core.djangoapps.ace_common.apps.AceCommonConfig', - 'openedx.core.djangoapps.schedules.apps.SchedulesConfig', # Course Goals 'lms.djangoapps.course_goals', @@ -3443,20 +3429,6 @@ COURSES_API_CACHE_TIMEOUT = 3600 # Value is in seconds COURSEGRAPH_JOB_QUEUE = LOW_PRIORITY_QUEUE -############## Settings for ACE #################################### -ACE_ENABLED_CHANNELS = [ - 'file_email' -] -ACE_ENABLED_POLICIES = [ - 'bulk_email_optout' -] -ACE_CHANNEL_SAILTHRU_DEBUG = True -ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = 'Automated Communication Engine Email' -ACE_CHANNEL_SAILTHRU_API_KEY = None -ACE_CHANNEL_SAILTHRU_API_SECRET = None - -ACE_ROUTING_KEY = LOW_PRIORITY_QUEUE - # Initialize to 'unknown', but read from JSON in aws.py EDX_PLATFORM_REVISION = 'unknown' @@ -3469,3 +3441,9 @@ COMPLETION_VIDEO_COMPLETE_PERCENTAGE = 0.95 ############### Settings for Django Rate limit ##################### RATELIMIT_ENABLE = True RATELIMIT_RATE = '30/m' + +############## Plugin Django Apps ######################### + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +INSTALLED_APPS.extend(DjangoAppRegistry.get_plugin_apps(ProjectType.LMS)) +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.LMS, SettingsType.COMMON) diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py index 04e187a84b..c73423b122 100644 --- a/lms/envs/devstack.py +++ b/lms/envs/devstack.py @@ -269,21 +269,9 @@ JWT_AUTH.update({ 'JWT_AUDIENCE': 'lms-key', }) - -############## Settings for ACE #################################### -ACE_ENABLED_CHANNELS = [ - 'file_email' -] -ACE_ENABLED_POLICIES = [ - 'bulk_email_optout' -] -ACE_CHANNEL_SAILTHRU_DEBUG = True -ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = 'Automated Communication Engine Email' -ACE_CHANNEL_SAILTHRU_API_KEY = None -ACE_CHANNEL_SAILTHRU_API_SECRET = None - -ACE_ROUTING_KEY = LOW_PRIORITY_QUEUE - +##################################################################### +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.LMS, SettingsType.DEVSTACK) ##################################################################### # See if the developer has any local overrides. diff --git a/lms/envs/test.py b/lms/envs/test.py index f42194289b..f32d50b6e7 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -297,10 +297,6 @@ OIDC_COURSE_HANDLER_CACHE_TIMEOUT = 0 FEATURES['ENABLE_MOBILE_REST_API'] = True FEATURES['ENABLE_VIDEO_ABSTRACTION_LAYER_API'] = True -########################### Grades ################################# -FEATURES['PERSISTENT_GRADES_ENABLED_FOR_ALL_TESTS'] = True -FEATURES['ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS'] = True - ###################### Payment ##############################3 # Enable fake payment processing page FEATURES['ENABLE_PAYMENT_FAKE'] = True @@ -532,9 +528,6 @@ NOTES_DISABLED_TABS = [] # Enable EdxNotes for tests. FEATURES['ENABLE_EDXNOTES'] = True -# Enable teams feature for tests. -FEATURES['ENABLE_TEAMS'] = True - # Enable courseware search for tests FEATURES['ENABLE_COURSEWARE_SEARCH'] = True @@ -601,6 +594,11 @@ ACTIVATION_EMAIL_FROM_ADDRESS = 'test_activate@edx.org' TEMPLATES[0]['OPTIONS']['debug'] = True +####################### Plugin Settings ########################## + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType, SettingsType +DjangoAppRegistry.add_plugin_settings(__name__, ProjectType.LMS, SettingsType.TEST) + ########################## Derive Any Derived Settings ####################### derive_settings(__name__) diff --git a/lms/urls.py b/lms/urls.py index 7a3f6fd78f..1098e6fa0b 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -133,9 +133,6 @@ urlpatterns = [ # URLs for managing dark launches of languages url(r'^update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')), - # URLs for managing theming - url(r'^theming/', include('openedx.core.djangoapps.theming.urls', namespace='theming')), - # For redirecting to help pages. url(r'^help_token/', include('help_tokens.urls')), @@ -478,13 +475,6 @@ urlpatterns += [ name='program_marketing_view', ), - # rest api for grades - url( - r'^api/grades/', - include('lms.djangoapps.grades.api.urls', namespace='grades_api') - ), - - # For the instructor url( r'^courses/{}/instructor$'.format( @@ -1084,3 +1074,7 @@ if settings.BRANCH_IO_KEY: urlpatterns += [ url(r'^text-me-the-app', 'student.views.text_me_the_app', name='text_me_the_app'), ] + + +from openedx.core.djangolib.django_plugins import DjangoAppRegistry, ProjectType +urlpatterns.extend(DjangoAppRegistry.get_plugin_url_patterns(ProjectType.LMS)) From 70164ff978a29f7d4263abf2b79a6b72bfeb4557 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:12:01 -0500 Subject: [PATCH 07/12] Update setup.py with few Django App Plugins --- setup.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/setup.py b/setup.py index c625903af8..cf594d82d5 100644 --- a/setup.py +++ b/setup.py @@ -63,5 +63,16 @@ setup( "openedx.ace.policy": [ "bulk_email_optout = lms.djangoapps.bulk_email.policies:CourseEmailOptout" ], + "lms.djangoapp": [ + "grades = lms.djangoapps.grades.apps:GradesConfig", + "ace_common = openedx.core.djangoapps.ace_common.apps:AceCommonConfig", + "schedules = openedx.core.djangoapps.schedules.apps:SchedulesConfig", + "theming = openedx.core.djangoapps.theming.apps:ThemingConfig", + ], + "cms.djangoapp": [ + "ace_common = openedx.core.djangoapps.ace_common.apps:AceCommonConfig", + "schedules = openedx.core.djangoapps.schedules.apps:SchedulesConfig", + "theming = openedx.core.djangoapps.theming.apps:ThemingConfig", + ], } ) From f16bfac88bbe29a20a9882f2e3c5c0944b9c486f Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:13:37 -0500 Subject: [PATCH 08/12] Update ace_common app to be a Django App Plugin --- openedx/core/djangoapps/ace_common/apps.py | 12 ++++++++++++ .../djangoapps/ace_common/settings/__init__.py | 0 .../core/djangoapps/ace_common/settings/aws.py | 16 ++++++++++++++++ .../djangoapps/ace_common/settings/common.py | 15 +++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 openedx/core/djangoapps/ace_common/settings/__init__.py create mode 100644 openedx/core/djangoapps/ace_common/settings/aws.py create mode 100644 openedx/core/djangoapps/ace_common/settings/common.py diff --git a/openedx/core/djangoapps/ace_common/apps.py b/openedx/core/djangoapps/ace_common/apps.py index 0527b125ea..33b1effbcb 100644 --- a/openedx/core/djangoapps/ace_common/apps.py +++ b/openedx/core/djangoapps/ace_common/apps.py @@ -4,6 +4,8 @@ Configuration for the ace_common Django app. from django.apps import AppConfig from django.utils.translation import ugettext_lazy as _ +from openedx.core.djangolib.django_plugins import ProjectType, PluginSettings, SettingsType + class AceCommonConfig(AppConfig): """ @@ -11,3 +13,13 @@ class AceCommonConfig(AppConfig): """ name = 'openedx.core.djangoapps.ace_common' verbose_name = _('ACE Common') + + plugin_app = { + PluginSettings.CONFIG: { + ProjectType.LMS: { + SettingsType.AWS: {PluginSettings.RELATIVE_PATH: u'settings.aws'}, + SettingsType.COMMON: {PluginSettings.RELATIVE_PATH: u'settings.common'}, + SettingsType.DEVSTACK: {PluginSettings.RELATIVE_PATH: u'settings.common'}, + } + } + } diff --git a/openedx/core/djangoapps/ace_common/settings/__init__.py b/openedx/core/djangoapps/ace_common/settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openedx/core/djangoapps/ace_common/settings/aws.py b/openedx/core/djangoapps/ace_common/settings/aws.py new file mode 100644 index 0000000000..56f149f247 --- /dev/null +++ b/openedx/core/djangoapps/ace_common/settings/aws.py @@ -0,0 +1,16 @@ +def plugin_settings(settings): + settings.ACE_ENABLED_CHANNELS = settings.ENV_TOKENS.get('ACE_ENABLED_CHANNELS', settings.ACE_ENABLED_CHANNELS) + settings.ACE_ENABLED_POLICIES = settings.ENV_TOKENS.get('ACE_ENABLED_POLICIES', settings.ACE_ENABLED_POLICIES) + settings.ACE_CHANNEL_SAILTHRU_DEBUG = settings.ENV_TOKENS.get( + 'ACE_CHANNEL_SAILTHRU_DEBUG', settings.ACE_CHANNEL_SAILTHRU_DEBUG, + ) + settings.ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = settings.ENV_TOKENS.get( + 'ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME', settings.ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME, + ) + settings.ACE_CHANNEL_SAILTHRU_API_KEY = settings.AUTH_TOKENS.get( + 'ACE_CHANNEL_SAILTHRU_API_KEY', settings.ACE_CHANNEL_SAILTHRU_API_KEY, + ) + settings.ACE_CHANNEL_SAILTHRU_API_SECRET = settings.AUTH_TOKENS.get( + 'ACE_CHANNEL_SAILTHRU_API_SECRET', settings.ACE_CHANNEL_SAILTHRU_API_SECRET, + ) + settings.ACE_ROUTING_KEY = settings.ENV_TOKENS.get('ACE_ROUTING_KEY', settings.ACE_ROUTING_KEY) diff --git a/openedx/core/djangoapps/ace_common/settings/common.py b/openedx/core/djangoapps/ace_common/settings/common.py new file mode 100644 index 0000000000..c825505c2a --- /dev/null +++ b/openedx/core/djangoapps/ace_common/settings/common.py @@ -0,0 +1,15 @@ +def plugin_settings(settings): + settings.ACE_ENABLED_CHANNELS = [ + 'file_email' + ] + settings.ACE_ENABLED_POLICIES = [ + 'bulk_email_optout' + ] + settings.ACE_CHANNEL_SAILTHRU_DEBUG = True + settings.ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = 'Automated Communication Engine Email' + settings.ACE_CHANNEL_SAILTHRU_API_KEY = None + settings.ACE_CHANNEL_SAILTHRU_API_SECRET = None + + settings.ACE_ROUTING_KEY = 'edx.core.low' + + settings.FEATURES['test_django_plugin'] = True From 4c6730260422d7cf136c32224ead14443a2b6b0d Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:14:08 -0500 Subject: [PATCH 09/12] Update grades app to be a Django App Plugin --- lms/djangoapps/grades/apps.py | 18 ++++++++++++++++++ lms/djangoapps/grades/settings/__init__.py | 0 lms/djangoapps/grades/settings/aws.py | 10 ++++++++++ lms/djangoapps/grades/settings/common.py | 6 ++++++ lms/djangoapps/grades/settings/test.py | 3 +++ 5 files changed, 37 insertions(+) create mode 100644 lms/djangoapps/grades/settings/__init__.py create mode 100644 lms/djangoapps/grades/settings/aws.py create mode 100644 lms/djangoapps/grades/settings/common.py create mode 100644 lms/djangoapps/grades/settings/test.py diff --git a/lms/djangoapps/grades/apps.py b/lms/djangoapps/grades/apps.py index 66684d5051..7336695b21 100644 --- a/lms/djangoapps/grades/apps.py +++ b/lms/djangoapps/grades/apps.py @@ -7,6 +7,7 @@ Signal handlers are connected here. from django.apps import AppConfig from django.conf import settings from edx_proctoring.runtime import set_runtime_service +from openedx.core.djangolib.django_plugins import ProjectType, SettingsType, PluginURLs, PluginSettings class GradesConfig(AppConfig): @@ -15,6 +16,23 @@ class GradesConfig(AppConfig): """ name = u'lms.djangoapps.grades' + plugin_app = { + PluginURLs.CONFIG: { + ProjectType.LMS: { + PluginURLs.NAMESPACE: u'grades_api', + PluginURLs.REGEX: u'api/grades/', + PluginURLs.RELATIVE_PATH: u'api.urls', + } + }, + PluginSettings.CONFIG: { + ProjectType.LMS: { + SettingsType.AWS: {PluginSettings.RELATIVE_PATH: u'settings.aws'}, + SettingsType.COMMON: {PluginSettings.RELATIVE_PATH: u'settings.common'}, + SettingsType.TEST: {PluginSettings.RELATIVE_PATH: u'settings.test'}, + } + } + } + def ready(self): """ Connect handlers to recalculate grades. diff --git a/lms/djangoapps/grades/settings/__init__.py b/lms/djangoapps/grades/settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lms/djangoapps/grades/settings/aws.py b/lms/djangoapps/grades/settings/aws.py new file mode 100644 index 0000000000..e929e15313 --- /dev/null +++ b/lms/djangoapps/grades/settings/aws.py @@ -0,0 +1,10 @@ +def plugin_settings(settings): + # Queue to use for updating persistent grades + settings.RECALCULATE_GRADES_ROUTING_KEY = settings.ENV_TOKENS.get( + 'RECALCULATE_GRADES_ROUTING_KEY', settings.LOW_PRIORITY_QUEUE, + ) + + # Queue to use for updating grades due to grading policy change + settings.POLICY_CHANGE_GRADES_ROUTING_KEY = settings.ENV_TOKENS.get( + 'POLICY_CHANGE_GRADES_ROUTING_KEY', settings.LOW_PRIORITY_QUEUE, + ) diff --git a/lms/djangoapps/grades/settings/common.py b/lms/djangoapps/grades/settings/common.py new file mode 100644 index 0000000000..fe198ed2c1 --- /dev/null +++ b/lms/djangoapps/grades/settings/common.py @@ -0,0 +1,6 @@ +def plugin_settings(settings): + # Queue to use for updating persistent grades + settings.RECALCULATE_GRADES_ROUTING_KEY = settings.LOW_PRIORITY_QUEUE + + # Queue to use for updating grades due to grading policy change + settings.POLICY_CHANGE_GRADES_ROUTING_KEY = settings.LOW_PRIORITY_QUEUE diff --git a/lms/djangoapps/grades/settings/test.py b/lms/djangoapps/grades/settings/test.py new file mode 100644 index 0000000000..7837e462fb --- /dev/null +++ b/lms/djangoapps/grades/settings/test.py @@ -0,0 +1,3 @@ +def plugin_settings(settings): + settings.FEATURES['PERSISTENT_GRADES_ENABLED_FOR_ALL_TESTS'] = True + settings.FEATURES['ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS'] = True From 93c6a89bd6f0d8ff9a32e37d4f6e9c4ed0aa3f8f Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Thu, 11 Jan 2018 10:30:10 -0500 Subject: [PATCH 10/12] Update schedules app to be a Django App Plugin --- openedx/core/djangoapps/schedules/apps.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openedx/core/djangoapps/schedules/apps.py b/openedx/core/djangoapps/schedules/apps.py index a05be5447f..de788a11da 100644 --- a/openedx/core/djangoapps/schedules/apps.py +++ b/openedx/core/djangoapps/schedules/apps.py @@ -6,6 +6,8 @@ class SchedulesConfig(AppConfig): name = 'openedx.core.djangoapps.schedules' verbose_name = _('Schedules') + plugin_app = {} + def ready(self): # noinspection PyUnresolvedReferences from . import signals, tasks # pylint: disable=unused-variable From 306ec1f9f07bf48aff8ee53e98fae800bf572008 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 21:14:42 -0500 Subject: [PATCH 11/12] Update theming app to be a Django App Plugin --- openedx/core/djangoapps/theming/apps.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openedx/core/djangoapps/theming/apps.py b/openedx/core/djangoapps/theming/apps.py index 0b9fcf1ecd..9ea4f5c2d7 100644 --- a/openedx/core/djangoapps/theming/apps.py +++ b/openedx/core/djangoapps/theming/apps.py @@ -1,9 +1,19 @@ from django.apps import AppConfig +from openedx.core.djangolib.django_plugins import ProjectType, PluginURLs + + +plugin_urls_config = {PluginURLs.NAMESPACE: u'theming', PluginURLs.REGEX: u'theming/'} class ThemingConfig(AppConfig): name = 'openedx.core.djangoapps.theming' + plugin_app = { + PluginURLs.CONFIG: { + ProjectType.CMS: plugin_urls_config, + ProjectType.LMS: plugin_urls_config, + } + } verbose_name = "Theming" def ready(self): From c5afde2d767c9555afc0d94692964897ff6cded4 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Jan 2018 23:01:09 -0500 Subject: [PATCH 12/12] Quiet quality --- cms/djangoapps/contentstore/features/pages.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cms/djangoapps/contentstore/features/pages.py b/cms/djangoapps/contentstore/features/pages.py index 9004a5a0a2..4149af0228 100644 --- a/cms/djangoapps/contentstore/features/pages.py +++ b/cms/djangoapps/contentstore/features/pages.py @@ -1,6 +1,7 @@ # pylint: disable=missing-docstring # pylint: disable=redefined-outer-name # pylint: disable=unused-argument +# pylint: disable=no-member from lettuce import step, world from nose.tools import assert_equal, assert_in