From ee600e1a7ec353f2d5b3ff3d9049f727e04152c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB?= Date: Fri, 29 Jun 2018 17:27:56 +0500 Subject: [PATCH] Ginkgo.2 support --- README.md | 56 ++++++++++++++++++ __init__.pyc | Bin 311 -> 0 bytes api_client.pyc | Bin 5751 -> 0 bytes data.pyc | Bin 6458 -> 0 bytes edx_release.py.save | 33 ----------- edx_release.pyc | Bin 1766 -> 0 bytes ficus.pyc | Bin 9296 -> 0 bytes ginkgo.pyc | Bin 5557 -> 0 bytes mixins.pyc | Bin 1649 -> 0 bytes models.pyc | Bin 3045 -> 0 bytes .../__init__.py | 0 .../api_client.py | 0 data.py => open_edx_api_extension/data.py | 0 .../edx_release.py | 0 ficus.py => open_edx_api_extension/ficus.py | 0 ginkgo.py => open_edx_api_extension/ginkgo.py | 0 mixins.py => open_edx_api_extension/mixins.py | 0 models.py => open_edx_api_extension/models.py | 0 .../serializers.py | 0 .../signals.py | 0 tasks.py => open_edx_api_extension/tasks.py | 0 .../tracking.py | 0 urls.py => open_edx_api_extension/urls.py | 0 utils.py => open_edx_api_extension/utils.py | 0 views.py => open_edx_api_extension/views.py | 0 serializers.pyc | Bin 3365 -> 0 bytes setup.py | 30 ++++++++++ signals.pyc | Bin 3037 -> 0 bytes tasks.pyc | Bin 2057 -> 0 bytes tracking.pyc | Bin 5620 -> 0 bytes urls.pyc | Bin 2077 -> 0 bytes utils.pyc | Bin 6470 -> 0 bytes views.pyc | Bin 47943 -> 0 bytes 33 files changed, 86 insertions(+), 33 deletions(-) create mode 100755 README.md delete mode 100644 __init__.pyc delete mode 100644 api_client.pyc delete mode 100644 data.pyc delete mode 100644 edx_release.py.save delete mode 100644 edx_release.pyc delete mode 100644 ficus.pyc delete mode 100644 ginkgo.pyc delete mode 100644 mixins.pyc delete mode 100644 models.pyc rename __init__.py => open_edx_api_extension/__init__.py (100%) rename api_client.py => open_edx_api_extension/api_client.py (100%) rename data.py => open_edx_api_extension/data.py (100%) rename edx_release.py => open_edx_api_extension/edx_release.py (100%) rename ficus.py => open_edx_api_extension/ficus.py (100%) rename ginkgo.py => open_edx_api_extension/ginkgo.py (100%) rename mixins.py => open_edx_api_extension/mixins.py (100%) rename models.py => open_edx_api_extension/models.py (100%) rename serializers.py => open_edx_api_extension/serializers.py (100%) rename signals.py => open_edx_api_extension/signals.py (100%) rename tasks.py => open_edx_api_extension/tasks.py (100%) rename tracking.py => open_edx_api_extension/tracking.py (100%) rename urls.py => open_edx_api_extension/urls.py (100%) rename utils.py => open_edx_api_extension/utils.py (100%) rename views.py => open_edx_api_extension/views.py (100%) delete mode 100644 serializers.pyc create mode 100755 setup.py delete mode 100644 signals.pyc delete mode 100644 tasks.pyc delete mode 100644 tracking.pyc delete mode 100644 urls.pyc delete mode 100644 utils.pyc delete mode 100644 views.pyc diff --git a/README.md b/README.md new file mode 100755 index 0000000..7e88507 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# open_edx_api_extension + +API extension for Open edX + +Installation: +```bash +pip install -e git+https://github.com/raccoongang/open_edx_api_extension.git#egg=open_edx_api_extension +``` + +Add in file lms/envs/common.py +```python +INSTALLED_APPS = ( + ... + 'open_edx_api_extension', +) +``` + +Add in file lms/urls.py + +```python +urlpatterns = ( + ... + url(r'^api/extended/', include('open_edx_api_extension.urls', namespace='api_extension')), +) +``` + +## There are two API endpoints: + +### Course list + +/api/extended/courses/ + +NOTE: For use it be sure you set EDX_API_KEY in Open edX LMS environment settings + +Example: + +```bash + curl -X GET http:///api/extended/courses/?format=json -H 'X-Edx-Api-Key: edx-api-key' +``` + +### Course User Results + +/api/extended/courses/{course_id}/{username}/ + +This endpoint uses standard oauth access. + + +### Enrollments list + +/api/extended/enrollment + +Get a list of all courses enrollments. +Used EDX_API_KEY for access to this API + +See original documentation for other attributes and usage: +http://edx-platform-api.readthedocs.org/en/latest/enrollment/enrollment.html#enrollment.views.EnrollmentView diff --git a/__init__.pyc b/__init__.pyc deleted file mode 100644 index f61c67ac319411af3ed7e8530fb5a1cb8bd4252e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmYLEOHRZv40T#05YlXc6QFLGNVAy@LY#obuxl4qnOGf*B#np}l~ZyU4gfY{gq1vh zpFi!_>T>wJ9`^7jjp|4J^;RM1a}WWNgWf@Epl`s120{z5g}yc8xjWNRb_$)b3JYN(In1H*x60FR54kucwSK2I?5wMtD^#BH7;9(If2f1H zp2FhCQcRmVQa;v`6ZyrL51o`Z>#eUWbXRoxI8pU;p^Qqxu`tpilq=8KBXVXzTr1Bu Qy4OSABR$wI)h@hpKj2kPy8r+H diff --git a/api_client.pyc b/api_client.pyc deleted file mode 100644 index 4bf54c1b9f78965e386ade65dc3d3c245dac0b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5751 zcmc&&U31(>6>VwkvB$Av69`F2$chciP9XLaOH~5d)E2?OvW0O{nk-9_qExcfGb39g zX}f!pnApXG_mQHCcYYBs{0-ju0lVj1jb@T9KQ6;0YWH`y?mhS1d)4~y#@h3LUwNLW z>92*qzrR?(#z@$!)=we)E8K@qEd9O zssR=(v*%2yr_VavvfpiE`|L~n_PZXcZk1S2}b%94bG{PCrKg~$F41teR``MjHf(cXnr z)3&+`4Wug~@gr&|`y{6I)^#ycxLFyN!zAp7msc)!s zOD11bVZZw=-s&GH)&l$-A-!>SOCP>Qhcv56Z>>!HZW#&e~~$g$>f!#d3_DR8?u5PJ=k%N%b`Q zJ=}`&?j>!bTG>iEjwU9TX$1I@K6W(TD4mSQ$1*1}`tymlt~NL>w>lpz)YxcRQIr*#i=rF6Ky7Q6 zz02NBFQFv(_;^J0KSSljBbh+-AT4{dY5HuMciHTp`05avX|W6KEB&sB#!_q}=c@a? zo}9zFMFW}y3cEbTt)Z|kHqO!%+_E%HR*6ES zoPt_LTD#c_q1(Mb^rP_6qbIZl`w$y`TBLfA6(Ey0hjxP9xOm?MMz|+%C5cRS9%Q)= z;saae6Q={5z8_wuNC*hDA`q9@R7mZMF@-p7C?#MROz zukCGkOa3+dy*5V_p)ZIc2U6i;h}Qt7%qJm2`+yN$9l!%HHL&@Z;2~6&)B`RPWKD6x zwxDU+P8k+Z#QPyj@y9i5M_DQoE8;OAf-y1F2m;h%;k9p`@+7d*7X@1I;|*>^ZAYoj zHKxxM$9<;TgCfIQXof#zK{15^iiIkN;uqz-;r8yLuht86(!#UWYI|$mmOr!fnO;7^ z)VK8lw{(tPppM3>zow3<=qap_#NsZY(1j`UJUY;b7&HWaY#mWO?T!ad8|kfC@;$Eo z5ev$FF6)qz41dhxCoKLy68;X3o=ez9jiVP_GrCh#DX(~IenJQmA~Om92aPu*3|fRg z^3*A)&sXL>mVkGGCWzHnrzJ zlkvYZR6KY53S-A+1ZU4y;>^l!fi@Ca)RCQ-khBw{VVY8{%}#82%K3UqxdN7LY*nK} zU~`K*Qx%zw;-V~$$K}MK^W8DFmXh<6VWluXtOnb=o_)m{z}rk+%13kA1=b^gYy(Aov<8 zH9qNz0X($jq&l6qx{ekjxC#Mde|l zZh%l(#%1c8c~idM6EivYMZ^0TTqFoW`r9F%<_*a;%sywjB-c#CF>$nwJH16Vp*w9! zFE1d6xsEX?{ivIIP!CZ$c%KVd5 zP_tMc%)^7*bkcwtTt82$>8K+^ShF@?fYEyxMm}@6EBf%-jjMtO*$8OGs8Er7=2jJHgX(5{%*(TFxtr zK{lM=Q^_=k58@(~`ZR|>Z~L8^ljm@th~~~NHbX1mJ9^1#_-l+VRKxU{f5lVhn#*l} z!|RFzSw&|gPBe<4Hjfa z@lPSooxiBm{`cPjLkgd7CwOizx5X19CS2;YJIkHT&PJ!xxw_uMzstg1@}|fZhrmEB(anb2%l~CFj1TEW6Z1VpY$NwEe{R>CpmuMFD*3opw`_-G*U}e OUia4hEpM~cS@{b07B5l& diff --git a/data.pyc b/data.pyc deleted file mode 100644 index dda4f0d465842a56eed2b08ef84bdebb441fbaa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6458 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 diff --git a/ficus.pyc b/ficus.pyc deleted file mode 100644 index f4b6c4bae737448eddbad01c592b5bed9f4f8c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9296 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 diff --git a/ginkgo.pyc b/ginkgo.pyc deleted file mode 100644 index cba28c5eefa4c6482c4ae36bc8ca0b98a53e1b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5557 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 ZFJi?H-M(+pW0;G`z!~q7`>kHx`!D%WBd7oX diff --git a/mixins.pyc b/mixins.pyc deleted file mode 100644 index 6577906fbd987b8ea4afc04ea8a091e10381b6ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1649 zcmcgsOK;Oa5FRJavn?tWDmP@f5F|(>E?l4@ZQT=n$VmlF538*`Nu1hVE4wMF#H}0< zNB$T;h93Yk>m(Hi1Q+UfXJ@~C_?!7=Q~t5hJpcaiJcPyLQva5k{zfLE*MS5ebztCt z!{ZVpB}mIKC`0PPz$LT{p8*CHh+M!b3>}CnjNAa64QdcomuPK;)&U!Uw6G2_Eu_<$ zfK8aJK}7gE+>~JY1+WH#4ajJJot>x&z1AAhiht76a>z4vri#YI*+{oajMT{NDwUwj zOojYjsB#Q>@v`lauU#^qXx1Kc)S?j-C-SO!F=kMok?CMG@5nsop1Ui|uJm${#220X z+Kg59vi+)~V}mbp8D7c}>JEK66SPUlJQg@NnCVz$oiv`unQqfA=Kng8=|v=Wn3ARj z<_Q^bGF72b)2=a?=4KxgNinONv_|J<7bBE&2)wyMKF|!#t-?w@M02PYBZ_L@c7GAtzOcNQFWKwrtr5d%^)T2)J?sYK8PRHDZ|& zvB(jLFP3?^txxOy-y#k88riyFA*ycGsXFWQt2*W>0b+larq};otsJ|pR<8Y`TB+{H z2YZ17&RxLQ{BDEXq%S_8rdbOLjoBUe-TrCd_sk<2oCL>v{o}yj7ygItVNZ1XegE*J zFZTU+e&0W8-J>;zc}EkOjZ`~S*|5-bgTVPkqQcAe(B1)C1cm54XR2h>#RNlRa~&`j zTQnmyB>6PB&p??B0fGI{V;cN5=XaXH;=io8@jEQC<}fx(+fJjry|L|XIa^Mn^b2Cf BrJ4W$ diff --git a/models.pyc b/models.pyc deleted file mode 100644 index d2118d90f5db7f0bf8c401ae4b6ab7405f67fcc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3045 zcmcgu+j87Q5be=k;wug=YzU-41gKp|#pV)5CJ+XH zMHx}=ysfCG&iVuD1=0>EYtX1ky(TFe(6B|eO(z(7jZA}VlZI2YhiOgvgXo0lac`Oo z2A#iXpTC&l9k;vJuzUI(*H%}d>Dv&a!r09DB{bKHs&w|Dvt?vmmH9QD4D3s1_zt7o zQwR&|#bVfM8#HY41}1P3`qoGM^m7pFg>_qn-#AR2_iXD{ky~jDU6Er)qO8!y zNte-HcX^PklOR&8@ZQmRZ&^I+qLW0p$7roubGWLPGfuMZSK+{U#&s1f?2O(b(|)CDH7Mw={On`G}JA1 zUA0ug)-k@$1F;U}Kcet7pyMVTxA>rd6I>2|A2lg%u|yC~h$JR;2*jP@0zq}e+xU41 zHm)e+q_o=GdK3pp+-j=P*hRCfvUyG)*e=@`aabarEi1~1=oP3E$a*PrWiDRC#%$Wl zK7NCH*;oqRSBt94CJPSZm{AzVk`8fY~| zYq;Gegh!$%@`_FZ=0OjxLR-=AigLWI^Fw-$!C_#nvl9rPDezfMSf^~|-o%=neep|d z(!_VdQRRHNYeUvN2bY;A{neVd9#*p$XLRaPxLM~(%}_FdL$Wg&+l{g;%80dyX`#+R z_C%dAup9G@u$N?*IOqjCJf~P`$E9_kckRJ6;-|A6FTi$1q?Vd^58P3k_#TWqCA9^` zza=H%Vx~DKwZEWDZeQj#R6#@r=LgOZ6VMr=CuPReWu_%%<`*tAD8i^MfFG(kqK<+1 ztCV-UYeJlEaPw_FtPMKO0`XU5D zhMXcHjv5ZM8{7*!za4kJ3b`)j9UodQOe^j)OhRS4!_Wv1bXM6g%|k!1;T{u6*tvw6 zPI!;k>2ekb6e6Kkfd?Zg3R!SIN-4{VzT|;r5XqMa>=|hyEktE$w9f4Fg1TK9G4tOPW=!ApcJIJct@S$qO<;Q(pRq)6YOdoiQNN3BAwk5tpW+*hd(BYi{bI%JUbp~=`~f5INhALGh^KLe{m7rD fQUqkHD?OYL(bsh`{f5CMHE2%p?|QJ%xUu{%g@&z+ diff --git a/__init__.py b/open_edx_api_extension/__init__.py similarity index 100% rename from __init__.py rename to open_edx_api_extension/__init__.py diff --git a/api_client.py b/open_edx_api_extension/api_client.py similarity index 100% rename from api_client.py rename to open_edx_api_extension/api_client.py diff --git a/data.py b/open_edx_api_extension/data.py similarity index 100% rename from data.py rename to open_edx_api_extension/data.py diff --git a/edx_release.py b/open_edx_api_extension/edx_release.py similarity index 100% rename from edx_release.py rename to open_edx_api_extension/edx_release.py diff --git a/ficus.py b/open_edx_api_extension/ficus.py similarity index 100% rename from ficus.py rename to open_edx_api_extension/ficus.py diff --git a/ginkgo.py b/open_edx_api_extension/ginkgo.py similarity index 100% rename from ginkgo.py rename to open_edx_api_extension/ginkgo.py diff --git a/mixins.py b/open_edx_api_extension/mixins.py similarity index 100% rename from mixins.py rename to open_edx_api_extension/mixins.py diff --git a/models.py b/open_edx_api_extension/models.py similarity index 100% rename from models.py rename to open_edx_api_extension/models.py diff --git a/serializers.py b/open_edx_api_extension/serializers.py similarity index 100% rename from serializers.py rename to open_edx_api_extension/serializers.py diff --git a/signals.py b/open_edx_api_extension/signals.py similarity index 100% rename from signals.py rename to open_edx_api_extension/signals.py diff --git a/tasks.py b/open_edx_api_extension/tasks.py similarity index 100% rename from tasks.py rename to open_edx_api_extension/tasks.py diff --git a/tracking.py b/open_edx_api_extension/tracking.py similarity index 100% rename from tracking.py rename to open_edx_api_extension/tracking.py diff --git a/urls.py b/open_edx_api_extension/urls.py similarity index 100% rename from urls.py rename to open_edx_api_extension/urls.py diff --git a/utils.py b/open_edx_api_extension/utils.py similarity index 100% rename from utils.py rename to open_edx_api_extension/utils.py diff --git a/views.py b/open_edx_api_extension/views.py similarity index 100% rename from views.py rename to open_edx_api_extension/views.py diff --git a/serializers.pyc b/serializers.pyc deleted file mode 100644 index cbb1cc42ea676daa5bb66f54cd3642b1639d86cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3365 zcmc&$U2hvj6uo0RcI+f=Xp*)mA97VuxrjPY2_d1XP}+caAeArnlyA%h8;2Ai&9Fr zD9@Grz}*eWW@XftLA%m6BUwjAb26C2yeYaad-JlRBx%XdBBvrh4i+St6+P#r?Q`iR zNjkFGn}e0<-}v^-v6Zlmm7Bw~{3g{|Qi-lZw5weh zWm%{Xqmd1F3KPb~*jQbySj37)e!h9G&n-c?j^$I4*LjX84f`6+-bSZ|Kmv(DjfWjH z2ry0xh=42yO$j!8b*{gKt~=G*g*9E;H5FAK;s>~a?FpLw0v*&I*JRifbCZKTFFA!! zBvg_EtD3kvr>A(^kYm687l6{MVf%)gN1xiTG)3$R;MrqjV24OqltGgdO6<7QCh+fO zF%82sPhA-L6SxK!=xoOiBC~59_YGfh*uzMCXJ25nrjx_9s4V&9<3Q&Jb~4G*?X~jA zy)5#3{m<8I>h#?*iigpzwrfSH^AMZDs7&EDr*oSY`IdqlkJf-8_s&*n!L5jHf1M6k5IshYKBtv%ybF{#qPR_b1o z`*zC77%%;gVdZ&$4+HIauWO_}cz-Gi)W`I+qJEVFnv)#Rn&beFK>QZLsqviDPLaao zwP!R!;f&NXQ&KZ?Pl$aPo6|hb#)$@B%9Pw@)CKfGK<@?2gaMBnTw_P_ctZPV447mC zqB3>JMfieN+(xs^DnbG?Q8A8axF_%?ka8d};7}y!9`FV_ij*dO>jZce*=`T%7GA)M zhJZ$(F2+eih7BnSg_S%#@e!e0n*xZ!8j@TgwFKV(sl#>=K zQR4AOIYV7@C}J(T>{RL}vvT;m9JjFlSMEPr@+vOTW?Iyitvry1yXfjq-ckW+5HUiup`oaQx;HF2;5o z3mV>hv4z=YkI>tPM0=9eo^0>w*mWmKiJ6TBw_EIVOOuXLmmcVD5+NfTmD*0z9fDQl zV^4RZ_s7~gpG3~83^HSAkF3+9l?o*nCBqYDGhCmVu|^D>-7g$!!1mbbfGgZ3bPp$@bz=(SwWW3fuCJ~> z1Ns;K<35dg)f+{wdt^aHPHJ;E(AiSQ=}sE|>)ak&_a0vV7cRlORKhbDoSr$*e>3Z$odw0>a~aYl)vC>_#oCQp z&!;rr*MensJXvrD9k_NLOFF48f8Je2?~b#`RFeO-5-}0qM5`)M4F{{W8yh|E4JPEc z$TBbz_19K$%0NI>cHxde#eG$nVcw~+)b-t{L=aY?ND8hW#=4|x&pF<; zrd;ad+Es=7Ev!5vt951^yRp%{l=Tlj>A!Is3&@A6#*;;r6L`9582Ql!loWp>xnJEu Y9uOSM;969Rh@fRePX|%6SYKWF2c!cJ>;M1& diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..93004ee --- /dev/null +++ b/setup.py @@ -0,0 +1,30 @@ +import os +from setuptools import setup + +with open(os.path.join(os.path.dirname(__file__), 'README.md')) as readme: + README = readme.read() + +# allow setup.py to be run from any path +os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) + +setup( + name='open-edx-api-extension', + version='0.1', + packages=['open_edx_api_extension'], + include_package_data=True, + description='API extension for Open edX', + long_description=README, + url='https://github.com/raccoongang/open_edx_api_extension', + author='Aleksey Radchenko', + author_email='dixon.che@gmail.com', + classifiers=[ + 'Environment :: Web Environment', + 'Framework :: Django', + 'Intended Audience :: Developers', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2.7', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', + ], +) \ No newline at end of file diff --git a/signals.pyc b/signals.pyc deleted file mode 100644 index 7d5054df8323add997e3d303dc0fc924f88ea031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3037 zcmcgu+iu%N5S^tYT9W11bz-|t)0Vve(L*8weJS9!L4x#xw5e)PC|W2F1Wk@4+Prml zuni|Y7;nHY`S;MoYk-?Dap1HI`fpI@6xXrJ!@LdtEi?CA*_eHoN!fq|R$;Th{ z*U2Bre{>D|NG}}oS{xwQi*#sI!en2W%4jhFt_~%D{oQvu$XIuqggVs-|1pr z+Uu_hM`&%5PmR6#s$7(R#OxTgnI)xwMje?*2OITyVi@sM-A1g^q;A3U zEFJc#Tbj$y=hZU{4Pgui7@r@6WyyEGond}v>W4HrJ}95rS&@G>`24^m7Vnl}bQ(_4 z926zy0lgH2WfI`I#oQ!CPD;}}OwE8^W2b$YhS_l(-rMB;s6n+oTW;CTP?Hasfu~P- zcxA@#Kan}oST`KsDtBPVt!ll7|_JeD%(-&quP%?J3cgABIJaKGR9a&W;JhNx_uK-e)%mss{5I zwX9d9aWF|Rjg36!__Ti9Ani$^BdisCe&6qK#}@h=jaSAD`yuTnCt7;urGo{P_u^er zF>EBXx~i+Tm4MGsF`ESZ_h~>t>wU14g9u#34EU3%mP-Iv(QE!9wYMN!rwFeGRiJ!< zYX$kh`?^4r-?kMy>)AWrF-GCspsbzP+eYYWOv1FD8%jOIWHYyV9@#>B^bg}K$(i1$ zCt-v}-W*DfsgS-wrmm1Sfmx<7p{UOR?sMkz-{EeXJND4k;r0pb_6BY%Gi&TVA~i{o z;JS^7F=LMLU2tPS7F0VFoDzD!!=edh7h(rSgeJx8GJq*I_bG5$)}m3HH7+__tqA2) z7xYL1-le$?5aNqA^fYp0^Np9YRKSQ9&NARhVbOt0Dy#V}$J$9#Y8~YRDRflD6u%{* zWr$L5W6f&?q>gv*5p%%I%d#+>;%1@svKM7$sTF%?N$3r%4s$a>9T0ysX;J=YuORxzbQq&WlzN?R0oPdoR~7S(M;;0oS(~iBwsVDuzxudnn6}jnlV1Z z?Q>D^r95ykU8cvN!rAiYkraelAYTE?v{B1Att=6X!j$T7J;8ZoMSxn$06&t-`wbUf z%iBJ%Rwu`Ei zvI+YM|B}DMAL9?ur@GPe5{!TAx%RHc&$Zwi;6Z)+g@%{-l3vP)2^30l&?_HqiGLvm*fiNt5o!9+V^sg z@--?3G#yYer0I}~b(*eIpop$FNUqXDK+{c9ZIXRb1Cnc`x^(@79w?Lp`i-2yQ<6iT zPq#SQ^U*pY&;G)5G72!YD;R2_Z69Xb9dgQm={?bXNDs)GZ4umJ?IENk<{h`za?34X$zBb+>_>PGIKD_kY1L?h zNhzbcF;|gRrpc{|Y!$_-uCzS|I%4iE&W_Kz* zH5){BQ7bQ=X@xZ6&e5#W5hD_*JCy>4s&q+aRg%dOpJO?#7rW<2$?@rdLoO?46|RdA zl#TJBn28ayvAd?*p-QV4@L@lM`mU&CldB{{#zmQ`gj4Lm7bzc_l%h~?Po9+{Y$7+9 zUoe{>ffG^J{N>NBDsRm{LY`et>V>_k%9rD>CnmG%t6HQtK+R05T9pYlC8Ev}#SAkz zZo>C7V{G~a&Qp=6O)jkZ4{IE&5}@PgWCk#E19iGVH)sXht&Je%l&<3C+jC|ODB{S{ zX0j|hWF1q$dT<29*#TjeUCO`?@B(yd({+bg1TO8cs_TTd7aYH2hjx}LgpyzO2x(`& zfn^{UoUYJ)j~==p7e`=TVQ}==&9xG85jSOt9Pew5BxfelA~Q-x*(|bG>XCV$o5+_+ zBs56oH%6C=xzW@TpvXtcaius@kBH@qbE$FWjAekddedNv>OzH6jz5n<*gh1# zxVWxkCSm*$8#zm+HFQE3!n2XrAZC52@F0Ct-*GjuwIKQZOg>zgw*)Nx%MgvCAjk&kF zX5rd~iwxO5MxgM(1hIUxgLrpu|2)|{{rTkhbayX_Pk*{NJUK{?_Fs9bdx3x diff --git a/tracking.pyc b/tracking.pyc deleted file mode 100644 index eda039c0a5833cadf06ffb36a5e5aaa84f0204da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5620 zcmd^D>u%h}6&`Xgy2P#o=jPOQ%qR&=rOK*Ef~GCpAVAat`5~pC(iD;55)3)JqQvFW zoYAdV{Zd;gfBF=CpQ3NjcjyDO-*<+4u>zxisuXBtb9OGAnRETlIc)vo_VSazzWyXt z&7Y6oPw|)tO@{xTDwNuDeP0!x8v1I_S02||s%WWUTkW;oxUGtg8g|uQ7vqll12!(G ztSg;G9<>`T;Mn}1_}d9RbZrOCNu5;24OcPT%4>V}t6UeE+0IY%(yer{vYQXeq)54u zPa97Qk9ivnPPa<+J$0$nrKkG7%6#=Fr7o2E`dg*0usf8OA7blrfWJuFqq;P~ke38@ zKe53uIn9p9ybYHV2C;Qq0RA)kae>TWB=&>?sY2iy9zzSjM0Q(R+KXIeoOL57^2~Lmipv zsAxB&e(ev?RQ2dM&&Wzr4~$*L)Tqc}Co&n9`eZV^jn#%%_ktJ)_blOgh{yaLO|H~= zi#BkeRQ-;0Jh2#`L}IDL<#@s4(uJ=M+G^~nv9JD&jcqj$`#I>SgD&l9>*o4*CooZ71Y*yMP83msnfdHm6~_ZiUOe zA47sl!FHX)@(rVleu!UXo}k&(+399dRs7}8u`Z9zWKiVaY*uG>e^h?Z`*_pjR=;1t zq?3U*o1;pXF*e0XmB;$j>e7I>&56zTsxw1%KOX2(pH}rJ4|t>F_&>#b#0w%CmT(-s z#NjOtDWHgU_+Mc3ODMI3ZYmy9>tvo=8&BjWf{K^|5lcE*o?3C^1{q@qoU%sh;0=J5SWqmEL!K$Z zlNZF{N%G+dyTXE_36x}(l0LOG^`s~SB!wnt@uWc574DsqXpfefnuEiczHZtkqnB~> zt9Zcoy}X4XyS8`zQL`AFdZZH|xVwm-^3?3IA!hU+d{M@Ek@gxo*4p7*=g0vg9gz(BSU zxPT_PzunhJ{CRFrYjafC=Zc5ipkmO0!Cs*mS2S;%pvaBYS%5mh?HBVyp}^Gr^Zw*e z7kG`UPk8&LyL@9(!_+#}IqI0;B*)>9|D=iuFv-MfLryG5R!BjT=Zct=H0344H)G)i zMarj=nlWtvnxL3n-6|p~QeyAf zN9wnja0RUS8aIoO$jGmg8j`WP&VLW>IJUBh;cYnC)w(K@6t(3{pV##`JujlwOWHE0 z<{5Mf&^pUWC+M=^X!W0q&%BgrmLu>ke)Kj{V5I6AhV3s4#BGocq8gG-mOuwX*=oM}0;YwLJUcfonRdsBaky^8tNGk`jFITgk2sai zzTkZlIy+teHE#u3E^}O$=kA2lV2|%3__Sgro6k){{315TF=dJKX>uV5v+sVA4zp|CXg_V@ZrV?sJ-)cjFRR!PTOpc!~g@ zVahOtqySbP+=d;jc&~V3jV=rN7;Di_(YQI$A?I$KS}BJ4O=}XJe!^QN(YU=5hSW>6 ziAD<5{!y9Q(WsEGq0SnmaCRkdM5-;>&kpbzaMa6kQzbUtcY0tKMpBsrN7az$PI8 diff --git a/urls.pyc b/urls.pyc deleted file mode 100644 index 8be558af3c83125865f0a37d8ef25892c1f11c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2077 zcmcIkTTdHD6h32P3{D&zj3I=yQdCQI)8bY8(7d3u$XQiYQ-anZq$Xjt><(sOZ<;d; ziBg`(f9pdZ`eXV7+H+=oRg=g1vb*Oy*ZJn#DgRxs9sRX&vR70Rcsp1m~_A*V>G$Id-iXS8Kjh%Yf_i;JN`f=0P%x zsqT%Z+MMY^U@^d^$-O_Hd*6UtQ*c;^$HZ?!Cqp*rOUe}Xevwu8J4dB4wDU7&?UI2 zf%*o75F{Rg69KP&2O5cI*weS@YCnDDI`%Vrw{L4MdK&sU8o#cRIh5MdS~+I&I|S^K z6`tf;+DfIW7>@&$jHHLMLyurCct}r{4BlE^mhqi$momA;u@QwQR`yPxrO9{Q#}S)tl~u9Qr)JL+thWb#0iMN`y8P2f6N z$2m%c?ofGwq}VJ~8m+d&Yc2el7Y1(ZA-XbAX%xj&w2k*nY8H4}x|dRgr=bj7KRu)L zHgcO|Kg|`=sBLV{nwd&{ohli$!yUpy9u>csjd*`;b$;02;kgnomQRjeAHKeN^YvF$ z={CpBjG-3@;2?dM9*T}rH{v$Ob0K%qme}%Q{8R_MMj0PVK%Vm$^Aq${m}w##+gNAJ zr?n6zp%)SI{U;i_q!Jlt+VmYg6I}tV?$~dr&9SzNB z6?D72e#FoJ>p}M_)Mqa0oCn0c@B`_(^MC?1AEv>%mkiUcpC+eW7LG$07}3vo3T5*v zIs(mm)(xbeDv$ONyXIwdN}S7j`nWP3exsaa4%(zk&x`y#BJCWo_1i;W0jj0 z6Bi4nKdT|L#@G$$)(D6ax~mMnA<$%-Rbw_E;nZ_cJIm z3;mHkrf1Xte?akRv=gU69?2(scH$$tGz5K1jq>u+R(XX^sh0UZ6c5FgSR7d`@g+U| E3r+JH1poj5 diff --git a/utils.pyc b/utils.pyc deleted file mode 100644 index 9a9712efcf8edb9630994933eead8fae65795306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6470 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 Qc5U4=+;eKr&YqM14