From 149950853d5adef3a3eb0ea54d9d4acf387d1ebf Mon Sep 17 00:00:00 2001 From: atompi Date: Fri, 16 Aug 2019 11:54:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Dockerfile=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8docker-compose=E9=83=A8=E7=BD=B2=EF=BC=9B?= =?UTF-8?q?=E4=BD=BF=E7=94=A8configparser=E7=BB=9F=E4=B8=80=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=9B=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=95=B0=E6=8D=AE=E5=BA=93models=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 21 ++ Ops/__pycache__/__init__.cpython-36.opt-1.pyc | Bin 233 -> 0 bytes Ops/__pycache__/__init__.cpython-36.pyc | Bin 170 -> 0 bytes Ops/__pycache__/index.cpython-36.opt-1.pyc | Bin 360 -> 0 bytes Ops/__pycache__/routing.cpython-36.opt-1.pyc | Bin 1509 -> 0 bytes Ops/__pycache__/settings.cpython-36.opt-1.pyc | Bin 4926 -> 0 bytes Ops/__pycache__/settings.cpython-36.pyc | Bin 2859 -> 0 bytes Ops/__pycache__/urls.cpython-36.opt-1.pyc | Bin 1662 -> 0 bytes Ops/__pycache__/urls.cpython-36.pyc | Bin 971 -> 0 bytes Ops/__pycache__/views.cpython-36.opt-1.pyc | Bin 3437 -> 0 bytes Ops/__pycache__/wsgi.cpython-36.opt-1.pyc | Bin 506 -> 0 bytes Ops/__pycache__/wsgi.cpython-36.pyc | Bin 516 -> 0 bytes Ops/celery.py | 9 +- Ops/settings.py | 71 +++-- api/__pycache__/__init__.cpython-36.opt-1.pyc | Bin 111 -> 0 bytes api/__pycache__/admin.cpython-36.opt-1.pyc | Bin 152 -> 0 bytes api/__pycache__/apps.cpython-36.opt-1.pyc | Bin 321 -> 0 bytes api/__pycache__/models.cpython-36.opt-1.pyc | Bin 149 -> 0 bytes .../serializers.cpython-36.opt-1.pyc | Bin 10339 -> 0 bytes api/__pycache__/urls.cpython-36.opt-1.pyc | Bin 1391 -> 0 bytes api/__pycache__/views.cpython-36.opt-1.pyc | Bin 5884 -> 0 bytes api/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 122 -> 0 bytes .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 114 -> 0 bytes assets/__pycache__/admin.cpython-36.opt-1.pyc | Bin 155 -> 0 bytes assets/__pycache__/apps.cpython-36.opt-1.pyc | Bin 330 -> 0 bytes .../__pycache__/models.cpython-36.opt-1.pyc | Bin 13286 -> 0 bytes assets/migrations/0001_initial.py | 273 ------------------ assets/migrations/__init__.py | 0 .../0001_initial.cpython-36.opt-1.pyc | Bin 7955 -> 0 bytes ...02_auto_20180705_1711.cpython-36.opt-1.pyc | Bin 1438 -> 0 bytes ...03_auto_20180705_1738.cpython-36.opt-1.pyc | Bin 1197 -> 0 bytes ...04_auto_20180705_1741.cpython-36.opt-1.pyc | Bin 875 -> 0 bytes ...05_auto_20180705_1758.cpython-36.opt-1.pyc | Bin 866 -> 0 bytes ...06_auto_20180706_1821.cpython-36.opt-1.pyc | Bin 1221 -> 0 bytes .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 125 -> 0 bytes assets/models.py | 4 +- .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 443 -> 0 bytes conf/__pycache__/__init__.cpython-36.pyc | Bin 453 -> 0 bytes conf/__pycache__/logger.cpython-36.opt-1.pyc | Bin 794 -> 0 bytes conf/__pycache__/logger.cpython-36.pyc | Bin 751 -> 0 bytes conf/ops.ini | 48 +++ docker-compose.yml | 81 ++++++ docker-entrypoint.sh | 122 ++++++++ install-with-docker-compose.md | 35 +++ requirements.txt | 1 + sources.list | 8 + .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 113 -> 0 bytes users/__pycache__/admin.cpython-36.opt-1.pyc | Bin 154 -> 0 bytes users/__pycache__/apps.cpython-36.opt-1.pyc | Bin 327 -> 0 bytes users/__pycache__/models.cpython-36.opt-1.pyc | Bin 2126 -> 0 bytes users/__pycache__/urls.cpython-36.opt-1.pyc | Bin 610 -> 0 bytes users/__pycache__/views.cpython-36.opt-1.pyc | Bin 5016 -> 0 bytes users/migrations/0001_initial.py | 84 ------ users/migrations/__init__.py | 0 .../0001_initial.cpython-36.opt-1.pyc | Bin 3478 -> 0 bytes ...ve_userprofile_gender.cpython-36.opt-1.pyc | Bin 492 -> 0 bytes ...03_auto_20180706_1807.cpython-36.opt-1.pyc | Bin 695 -> 0 bytes ...04_auto_20180706_1830.cpython-36.opt-1.pyc | Bin 607 -> 0 bytes ...05_auto_20180706_1931.cpython-36.opt-1.pyc | Bin 617 -> 0 bytes ...06_auto_20180708_1347.cpython-36.opt-1.pyc | Bin 605 -> 0 bytes .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 124 -> 0 bytes users/models.py | 10 +- .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 442 -> 0 bytes utils/__pycache__/__init__.cpython-36.pyc | Bin 452 -> 0 bytes .../crypt_pwd.cpython-36.opt-1.pyc | Bin 3764 -> 0 bytes .../__pycache__/get_mongo_log.cpython-36.pyc | Bin 2130 -> 0 bytes .../get_verbose_name.cpython-36.opt-1.pyc | Bin 905 -> 0 bytes .../init_yaml.cpython-36.opt-1.pyc | Bin 1103 -> 0 bytes utils/__pycache__/init_yaml.cpython-36.pyc | Bin 1113 -> 0 bytes .../log_websocket.cpython-36.opt-1.pyc | Bin 1638 -> 0 bytes .../mongo_log.cpython-36.opt-1.pyc | Bin 2675 -> 0 bytes utils/__pycache__/mongo_log.cpython-36.pyc | Bin 2741 -> 0 bytes .../__pycache__/__init__.cpython-36.opt-1.pyc | Bin 449 -> 0 bytes utils/db/__pycache__/__init__.cpython-36.pyc | Bin 459 -> 0 bytes .../redis_ops.cpython-36.opt-1.pyc | Bin 5430 -> 0 bytes utils/db/__pycache__/redis_ops.cpython-36.pyc | Bin 2573 -> 0 bytes 77 files changed, 372 insertions(+), 395 deletions(-) create mode 100644 Dockerfile delete mode 100644 Ops/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/__init__.cpython-36.pyc delete mode 100644 Ops/__pycache__/index.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/routing.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/settings.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/settings.cpython-36.pyc delete mode 100644 Ops/__pycache__/urls.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/urls.cpython-36.pyc delete mode 100644 Ops/__pycache__/views.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/wsgi.cpython-36.opt-1.pyc delete mode 100644 Ops/__pycache__/wsgi.cpython-36.pyc delete mode 100644 api/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/admin.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/apps.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/models.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/serializers.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/urls.cpython-36.opt-1.pyc delete mode 100644 api/__pycache__/views.cpython-36.opt-1.pyc delete mode 100644 api/migrations/__init__.py delete mode 100644 api/migrations/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 assets/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 assets/__pycache__/admin.cpython-36.opt-1.pyc delete mode 100644 assets/__pycache__/apps.cpython-36.opt-1.pyc delete mode 100644 assets/__pycache__/models.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/0001_initial.py delete mode 100644 assets/migrations/__init__.py delete mode 100644 assets/migrations/__pycache__/0001_initial.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/0002_auto_20180705_1711.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/0003_auto_20180705_1738.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/0004_auto_20180705_1741.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/0005_auto_20180705_1758.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/0006_auto_20180706_1821.cpython-36.opt-1.pyc delete mode 100644 assets/migrations/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 conf/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 conf/__pycache__/__init__.cpython-36.pyc delete mode 100644 conf/__pycache__/logger.cpython-36.opt-1.pyc delete mode 100644 conf/__pycache__/logger.cpython-36.pyc create mode 100644 conf/ops.ini create mode 100644 docker-compose.yml create mode 100644 docker-entrypoint.sh create mode 100644 install-with-docker-compose.md create mode 100644 sources.list delete mode 100644 users/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 users/__pycache__/admin.cpython-36.opt-1.pyc delete mode 100644 users/__pycache__/apps.cpython-36.opt-1.pyc delete mode 100644 users/__pycache__/models.cpython-36.opt-1.pyc delete mode 100644 users/__pycache__/urls.cpython-36.opt-1.pyc delete mode 100644 users/__pycache__/views.cpython-36.opt-1.pyc delete mode 100644 users/migrations/0001_initial.py delete mode 100644 users/migrations/__init__.py delete mode 100644 users/migrations/__pycache__/0001_initial.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/0002_remove_userprofile_gender.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/0003_auto_20180706_1807.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/0004_auto_20180706_1830.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/0005_auto_20180706_1931.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/0006_auto_20180708_1347.cpython-36.opt-1.pyc delete mode 100644 users/migrations/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/__init__.cpython-36.pyc delete mode 100644 utils/__pycache__/crypt_pwd.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/get_mongo_log.cpython-36.pyc delete mode 100644 utils/__pycache__/get_verbose_name.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/init_yaml.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/init_yaml.cpython-36.pyc delete mode 100644 utils/__pycache__/log_websocket.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/mongo_log.cpython-36.opt-1.pyc delete mode 100644 utils/__pycache__/mongo_log.cpython-36.pyc delete mode 100644 utils/db/__pycache__/__init__.cpython-36.opt-1.pyc delete mode 100644 utils/db/__pycache__/__init__.cpython-36.pyc delete mode 100644 utils/db/__pycache__/redis_ops.cpython-36.opt-1.pyc delete mode 100644 utils/db/__pycache__/redis_ops.cpython-36.pyc diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..82694bb5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.6-slim-stretch + +WORKDIR /app + +COPY sources.list /etc/apt/sources.list +COPY requirements.txt ./ +RUN apt update \ + && apt install -y default-libmysqlclient-dev gcc python-dev libsasl2-dev git sshpass mariadb-client \ + && pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple \ + && rm -rf /var/lib/apt/lists/* + +COPY . . +RUN cp conf/celeryd.conf /etc/default/celeryd \ + && cp conf/celeryd.server /etc/init.d/celeryd \ + && cp conf/celerybeat.server /etc/init.d/celerybeat \ + && cp conf/get_mem.py /usr/local/lib/python3.6/site-packages/ansible \ + && chmod +x /etc/init.d/celeryd /etc/init.d/celerybeat /usr/local/lib/python3.6/site-packages/ansible/get_mem.py /app/docker-entrypoint.sh + +EXPOSE 8000 + +ENTRYPOINT [ "/app/docker-entrypoint.sh" ] diff --git a/Ops/__pycache__/__init__.cpython-36.opt-1.pyc b/Ops/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index 661808153f8f5489fd2ce55c70be41dec9d534a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmXr!<>gvmcQm??fq~&M5W@izkmUfx#cDtzg&~D8harj~g(-zOhcTBaikXoil_86z znSqfZg(aOaiZz8Xm_d{EB~UGc-%CaysmXYYIkBMN7FTj=PHItQJdmx)7R6prnOj+0 zm=nbY5iVi|DlK9G5>Y~#dBr7(IXUr(#qqwC!GS(0Nw?VJ<3S?vD;bK|Kng*`FB$!k u)Z&u-f?|DtD2|WM%*!l^kJl@xyv1RYo1apelWGTYL@`JM2O|#?2O|KG-8pao diff --git a/Ops/__pycache__/__init__.cpython-36.pyc b/Ops/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 46ca6486a484243134d0774ee75e5a118e3a0b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmXr!<>gAB%^a=Az`*brh~a<<$Z`PUVi6#b!jQt4!w|)g%8Scl2 zm20aBv(h(pDoFAT=S@PAasC}B=FRW%((}u1-STFqipfve_IWtmXCwg<0zlG)eU-+; z5kBa4V>4G;@%z94s&%G2UuI|uOWIp<6#hJBjQD>R7{kGNW3j8vMS!`8 IZ6;>w53&DL%K!iX diff --git a/Ops/__pycache__/routing.cpython-36.opt-1.pyc b/Ops/__pycache__/routing.cpython-36.opt-1.pyc deleted file mode 100644 index 100fd6a9e77638693db4b84ad2703194fe39940d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1509 zcmbVMOLNmO5VoDS^Jto+p}fP5@Q8WL6zFsc9Xf?W3mpm<0pl^YNKGZnBPn!}3y1y& zE)0KwAHa=Y;wu+8ap%NJNfWnlq0(6U?e4eIdbRfLYSsSm`Rl8XdBgZ_q(%+!19-#_ zSONnXff-oDq!zMh24zg8XGoUjP>$wNUh7#>phZ;FI7dpNc|Upz1m%n%-QI%w}0-BW`l(=hDo|2ynXr?U|f z+y|c(X!Il26C72WyKngwSb0EC?xkJU2;TQN-jSZa2j=o7>px_X7*NbXt!ywZ zQ+j!4=W$A%e>CuXk1~Q&#+okc)C0TBuSH^u1%o5BCK$JgH+;j`UOIXm$Ak?JElFt~ zzY)ye!*W#E7Y<>4XJi8iG|d?`0DF;esovk!{?^16PqrUh&x7?Xyp9mN&gGXkuHSoo zwL1f&Cb-pEY47OHB*yI@zUVAsw#WVLl|J-c>_*UutGz2-XXL09RD1n1^6!8r-7`tS zbpz(RZc+~3LEo_6fD^$jxM7}wC8_(+P7x-eH)(R7RlXc7s5`it~ zUEM6liegi(?Y{p86AfG57-5^z!?xBe9Sy n7S7YjGpTGZ9wx<=aZjzPbi_4SvSuA-<@mHLD{ER-(M-=jZOf;t diff --git a/Ops/__pycache__/settings.cpython-36.opt-1.pyc b/Ops/__pycache__/settings.cpython-36.opt-1.pyc deleted file mode 100644 index a98d7143ece177623965cd7ae86d3d49f60388b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4926 zcmb6cOMBB+)^_A)5)(pz5GXZ;0D(p(2@u-yQfwu0ksq}jLhejQBm3OgN^IHHl?&09 z)of?YALt*Ng|@TGH{UlufYqFdiF&^=5~IQ$dW9aBj?~8WZN+^2Xo{+O3ovH63%~!jeh50-dkUQ3*PSn zEO@^cKg7ue$dCn?CKurnxdbtC87`AWSR_~A3R!|Bauu$UYjBNx1z*8+_!@F>1HOTq za0`~(Ciw6G?mu3>`K!M9tbZ~Xw!80+&6^E3de6CxE)}i* zko#EF2ZOHB@;u=tfgb9^uI((hI=X4nF4HUu1`}K8GqKLWf=^KN6Kc8fPM_KAV|s0U z6CM0OTs!^OVkEK>bCX+A;gwt|l0>0e*)Huk=^#?jbcG|r-T1>QccFe?kPF80agtPSwCyb~w zTza%R7ib9)r`Vk$PG${_7dOSV@17WcGa?Z;?xhq-tgUZ6eDv5&S`=LX%$@2Fn6uy? z2EAh1meCYFUgyFjc4&8;s}o2rLQUH~8Bpe2o***H7$)TBgdP&~HcBi_O4t~<7EfG8 zvKD2wc4+B6`nGQ!V+-_(Lu=74wNA7q)opBWpWsjeqs^RoePHlJV4^fI3Vrj?XuGK} z1)Rmey*`8IYM;lst?~RV40YdfR)awI41g|ut7G{w+8SDheIlv>P#)2ohm&~`WRf^0 zull$#sg=(+@m(SMPWT_J%sLbc_mgH_>8OWb%HaN zkGDUqJ8?j*p5Yg=SYi?%O109d# z^>?v`MNk>`n$$ulK%QoJ2NuXuQQnsJl!jK5>*bQFmZ}x4ph&7JtK@n}llB_Ba-~r! zNR4s&Vo0w^nDS#Zl17ZIsU;#iDL!?ER+l;XAY?Y}VUgQZ45})ewPMlhQjLJj+;qsv z$b5@;(08_mZNsk>=G>js_c@OUv^i`$_r8GBqBx6~{Y6@PI1+W|exQ|a>&*k6@xNmO zkGQij!92?H-w_CDD}t58C=sDps;h2Fs?{_PN>*z;4yv=jefyTRz1A3xb7wKw3Yupg z?wzn-x+`&uU(a2kB9*a0?WuCzP1P{g`_+2U6?Us?!}^*xtlbG?`3b}U&I6n~?^UmT4s2-8zf@D%Fpb`@r%a41bvNU3%gRKA}g9A9mrU5 z7Yni?*AKM1tnv;SUTzmZMPn6}Bn4Ytom>hi4M}~ajp0K@QlTK%8X8`X8`w_CRiC}6 zm8CZtmr;2a)(X2NrAQV+U3I)uYidKPH{>Fj4fn3@HLycx>T%*{1pHCw%`!~LXSSp&Dx|R^8gjgab2r>N3C4?w{Qv5xIbnnRuJ{CDWs`nOR z(Jy-van5&%%VrVcpOGZerXn1NmY@aEtOtkmY(hwca4echC#Lw55rnu93m$~#rm|6Q PHL@s$s&Kb6YZ3Yn&h|h$ diff --git a/Ops/__pycache__/settings.cpython-36.pyc b/Ops/__pycache__/settings.cpython-36.pyc deleted file mode 100644 index b113e78f9f5993a939392938c2777d5b7b600f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 zcmb7GTXWM!6t-mf3JD?560S9c0D(r16GDI~Ey7lU2j9k0plmy%QGC|UCe{V53|O!E z8~lO(CBOEGw?6aKBgsyTVOknRtJR+Ko%=cR#@t-~Z+G!`^GqV~S7Pcfhx?~^^D9Ck z0SS@-0mQyQgy<;}kqQUN18Hha(e#lJUL-?Bq-8;fs5zQ}{Xzy@dBg*d&*ZH9j~Jy8^ikTjUCeT4Lp~c?Uz3uN;_m&na-~ z`^@g~Lf7#MO_vv3&pDtSU(V-us7*c7r%>1%7H&htziNWT>;m^q&mVK%E(|zID2xTJ z%WLu`qPJ0=<#@EfY!q#oK6C5>{`>n3m9akk33b!_zVEyIaj^(ahs&{!i3J_UDpI?M z0*k)mvJNj!j4j6E{e4>K4*LBvV1XrhOCbX1Bbz2M1eEHiy?;wzao@^Kh_w@9E~f2g^6!np;ntp*!gH z-yhmH^pS8kI3K$wcO2XI*q$7PGB`JTI`H>{%QJ@|gxbD8bSV!m%n&){9E1BM!9s%B zL&T+7gpcXygh}ARHQq7peTVy84!x7L$!poMyR1j%J<5Hf>zNjP=Xi&~qUo}jQ*l|$ z6ReKqTMVF2-Z*m5~~{0A%d zx^fwpmyEufV%?gt#l-MW+o9k)MxJ$|0-gfSIxz|MG`JooU<&o%D^B!T=kUPn9AXp6 zzio$sZn|N&@DtppyPs!4cByBvIPG$kPZ>$!)5Z*M=+cP`n2-oJg+X1PO8*XeW^&f~ z91_Sg5ZCN6I|`HB!m?`&tUc=CZhZJLkDat4kxLbITiLDYMoVqitD07AHjHvj(KJ;f z*CsS&SAVWH^lDkrr|C-*dP~`w!#Q&!TB(1 z?|3h2ZY;?tk)sUIt~u!Y!O~bS?41PB8uB;&QPOewNb(%V4|0lGTHm<8`QUnxFRjTX zx%5abt*xX;T5Vvy)RELs>bUM|YMW$RnDbZ7c4Z_zZ)&<1mPhb>#=X#I*)=)G*#ia+ za|UsR?Q-fVei*NTPc>$-z8Q|2mobOq1;2c&q&l;iHLz;b?)m#C_+P&jA5Wjw*v1n9 zPrp?FHVXAv=SvAGYOfCXD7mYbgKQDMxj2T3Bpq*p?DFf?WovaARs=5@wwCBg`0!HU z{^}@W82C*!jFIS|2tLFdxu(C58D*Z0GiH=A_jq)YHH`36fUMbPil&BjF-kKV1MH8a z1Bclpuc_s>sv9rV*P~QLeYU$p=9F5k`AV%AVeT|CUu|eQ9^nC&mPYdRYNb+BUny;s z%(qodH@4fDdQA5Va=P7Y>c(!nR&F-7NlsVmt(u}^_b8l{n? za3mO$nlWA~wJH*uSj=-ZrLnUcwtu-59pGzmhE1!|X@s*Oqh2%d?>8>dN diff --git a/Ops/__pycache__/urls.cpython-36.opt-1.pyc b/Ops/__pycache__/urls.cpython-36.opt-1.pyc deleted file mode 100644 index 78f85fedbae654ec0231cac4bd8fbcbba36c7eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1662 zcma)6OOxC*5VmJLFVADM*$oNLi13*4)?z`pZG}K8B*j(%ONDT86*wA8JL6r;a!Hzm z^>xqu5cm`P4_`U)7dX+9wPc`*s@Ub$_qAKC?v`4gPN(5-==P7l_dV|qZ|k`M_zU>d z9pCe)mw42toxCg58R zzYh2fhu;MJmcwrYe#hb4fRV%R0>0z$dw}0}_yfQnS{%?h>(d1ro?XxV%kFA7*`v|- zUUWc;j^~|J3jOfpYxGc*r}=6liOxkChELZFJ=@5lB3d(9s%NOkl}1u*G_w;F(gHot z*$Wk;$3h}5Btv<5DkQfqP*pIZ7*dQKg$SOt)|EQKn2Jor^o*1%QAu&eG971vV^-q3 z@yA$;D$f))#u%1YIDGUo;owUhg^xF7W}<7CwN5{Y(E~~mDN)WVA@vbLr&4glFH%xf zPPt`&*V)^YA%U$7VJalMUd-o*F0ZxV>=2cNv(M%R&!g~RL6rJv35n4yum2Z?&}$}5 zAh9jfRXAUPFB|cC06vWJI$x6O`d( zyv6DPSitGUjhOJ#Y15)L< z9)h%4*MZ!WxE^Vu&Ra!)11Tz8hjwgr12|MngL2%0R@;MK(lFNyt!C&N24)+ioLyBA zvxXU*=0$!EQH;#cYC^h%nwSp9^^7h#Dane-_TS!5oY9=%#pmDMGuv=KK8TtrwCRSk zQm0Y~{cW`04AK;IY1)jpPK$&a#FJek0uXSs*v4+pd#p5E1)1!@pMPeVC?s6nUNeBU z=b}_{V5X0Z7=uVAD^}VKOmn`H6QiFRF*9NZL=%4V=*!~=>64R_r_Fe)g@5(rO=D!l wU$-#aRB)Xr3|E}}%<+z^i)MI_3%V)TedA0WfC&73e`4P5%-?>kuKnZW-`9%y%K!iX diff --git a/Ops/__pycache__/urls.cpython-36.pyc b/Ops/__pycache__/urls.cpython-36.pyc deleted file mode 100644 index 99403c433d6041a28b29466df3fd990173cfdc89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcma)5%W4}j6xEE!kBpPHpCGz%2Hcr8-I=tsgoFk{8v59{21g#rw#?{(B)5&X`I>%B z_p|M)ztB~$5VSiI`2y7w{oZPuop`zZKb@O$20w8lMp@DXJxsbYlQYl}aB zxWZ>j&iP_(h~rA8>8B;bw`)^r;v6&5-r|Z|hmBf0778qO3V-G7o6YfsGFT|XFqd;> zL}-C^#fW9tGB!#voTYQxj*5b+(<U(&PuqKwys{lmgl1 z@nA4)crBG+LoA74uLj;9Wa(K&tbH~EVsx+T|4=BmWX1!@gHSs-@1R#e|3EZ8KPPtT zn;d8VAi9)gwWeGyK!h;QQ!8PaJAE#LFc_e~dVDTB&hWgEabDTyG{0{6XL}tA(|JP9@tP?qs@_( zTx;fR2wZ0eb$2?2mo%M@A2r~Cvom~V;7y~tzsJbHmqI4-;ly&s>csP``+K|pflS{g xdGqJ#`Dk);S1ySWH`@nlC-6(c^_984t9z$H(RIaMKZXjMf=Qyo=t*)2_AivzENuV) diff --git a/Ops/__pycache__/views.cpython-36.opt-1.pyc b/Ops/__pycache__/views.cpython-36.opt-1.pyc deleted file mode 100644 index 560143f0f300734c0baaa03f70faf8881cab01f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3437 zcmZ8j-ESOM6`wmZJ3IU7wX=4THbE7FhpkdOP=ru%0%_xfg5nt42x$bY)_bq*8PDu& z@7zsdYb_DBR1vDBAVSqv6>Xu3_)LVT)JiQCe*q6Xp?O9Adg^)}LMyU8JIZ;v z$nhL4v%`GkdTvzk3VNOki_4_zgr%tLm9;D%R-&p`)w~;yMK!Oc`9e4zO?VTUFNPwhHDV&U^yeZ9>!;{e|?-ck7ufA${r}-GK;rSFF=M#87%}?+;o@e+ZpThGjXG=!o zeIdbkg#1al=eqd9=Wh zqQixRVfHLY=|_o>3o>5yLxE`?Yyi7pi?F7aguJ1Z-8In>vZYALeMxS1)xu3q3trq* zB6;~b*y@^4%`jf`J59f{8n+pp0KYtjjqwsjvI5dK0wZ8@QJH}i*aKsmsoan=l{4fl zl^=4pa={g#ms7X8A#`wGZhouETgm!L+>(5HT}9#6 z)a?4#E`HPoYHIi3p0w;I&7{{AQqP=A zNg`B|=HnG|Rg&h~aj&Cf5l52+A|;TtV$E- z6(*8g)5xcJDPHM`M0w?wHs91ny-GI=$Z%SuFBtOUs|ZjNb42J!drR-xY|*BP=iU@6 z2{ugrWXPwn%@?O339`PehXVaVNEt7F?GjC8W2y(F%K_VaumTz*bYskJeI~jB4j)w=+jsDRu68L!tm8|Gam-vRGrtKr;?&kxwP4fp2zu(OR-feQ^6 zyff4&fX}N!P((O#ytrd-yL~tQYu^n@u=#zwDff-OOQ9JC%tFBO^1oPb2Niy1z?jj2 zj-FL%rmDeMQ0rTKY=;Hoyvl1kB%KIOz=A{2w`0K?gZ){A{e=Gd^VqRoHXu8%CV5>= zAq8+gHQ8s6`N#6kV&CP)h6{Z)vOJkt&b-5?_(`7;LS$!2ULVO%W%AMdbT-%Madtkn zJ3xihx;nRR$WRwPmzCA+az)EK8hCAAl>FF~V=n!OoIo|YEpu3cZAYhJp1c`+?X z5s7F8)ftI~DW5|Q$nzkFvqVl2AtaCllntie69i=tny8lQB|S>v{kJ~Z{pWA@?%dt| z)w{R|vi+MHi`*gJcI7vr_ywEUIx#~p5>1wcTI82}Qq# z()54+Lk99f0T-P-hn1;?0+bcvoJgqkm`gIKky6f(xWYv% zWx617P`{1qDJ=l2TW#gv5NS>y(klY3o8ng2mzx2*2Q$uSb{rIcv)WC*~gZ+INgw1kg4$^rQ;T1Y@8$B7W|KE@7t3Dd7)B$q)9 zRt0Dj*(o3`VQpFe@ifa;b;#SSYL=nrnl;m5b&{G@=+^LeS5 zFd!$*3D0mS9L>=k08oaLEYEYZXyU-3d%(5AHuCakk7ruLoi$VeC|Xd(tdD@y;6?29 zZ&ex?gnB^*t4jk0gft1$^t$qCTvxmToMe3_Khv_DMrQOZ8d)s`>?5aU_JMz6$MB^# zuao}B+Y~SG^Z3+aK^2W!o5+gj&Z^;M+9S zDWH=<=Yg)-i}XSR8&!`kYI%V;s$-oh@;k&)>oB}-GdovFdX2~vHS+_=JdETS5aTHK zkvcUtfyyYND(cKeHIy+VX*a$kzl?`hLIe$M7I*US@FiQcN$-s6h{q-rXTBu#w&KiR%cqZl8rbAw5#h3R&agktC`;t6X*Eo_P&yZSf#dY21T=)OI7=u{= diff --git a/Ops/__pycache__/wsgi.cpython-36.opt-1.pyc b/Ops/__pycache__/wsgi.cpython-36.opt-1.pyc deleted file mode 100644 index e8a806518b0ee5b718a45bc2ae994c137526e041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmYjN!EO^V5cPV~CR$p=0U?gQMuK$&H-r#KEm068hZG@&!^W&98%JJ`wRTh5Yd?VR z;Cs0F%86g##3T_?EX|DVd4BJCUY?&9e8j*0$Qb+0j#f_lw-jMSNwWphndUZIWK?s@ z+kBB{46;pcbE13t~Z5-sX$3(qZV!HTWw%)aGR3tB9f%6n^S6%D%OlK9?}LW>;; z<4COCHv~E&H$kk7g=ZoF6zdp$cqOIAI+S{&T!a5T)!0gK@c~cVa`EBabUdr(mseMl>3Cj!nq7SUczJh5KQ9BsXj~J9 z{nW22lCP@7F{DQa6J<@_%N=FMNhI~bZB2(R74%TUN?qHS9vrFtWL-hPefs-UMhFpo dkR-K_9aHIV)8O@CjBf@64!hLj1AfLI@_+Vvn^yn; diff --git a/Ops/__pycache__/wsgi.cpython-36.pyc b/Ops/__pycache__/wsgi.cpython-36.pyc deleted file mode 100644 index 44f591fd4dfc76b0f78b6fbfccc749613a77387d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmYjNO=}x55Y=iO+ia7NL+M%MW=MBUdNU;?5Z5>~cEBkGH?US#=*a~6zM(>4 zDqvEhSg}noqmf)%HkAs_m<5Pt&Xu;4B*J7i7IUt1^WRfuiUf3W9=DU3Svr#lD3w_i zpk1=GxlE$JI0`ao1^#0WF5SGPdp7*1>zk`VZ;%HVT;XC*}NyJ+(iiim-4C|4zG| nhr3la<5h9Do3MRA(QRxv<8tMjUv~q&Xkwe)K#ex(Aw8z=Xds`U diff --git a/Ops/celery.py b/Ops/celery.py index ec36cc92..74310d02 100644 --- a/Ops/celery.py +++ b/Ops/celery.py @@ -13,11 +13,18 @@ import os from celery import Celery from kombu import Queue, Exchange +try: + import ConfigParser as conf +except ImportError as e: + import configparser as conf # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Ops.settings') +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +config = conf.ConfigParser() +config.read(os.path.join(BASE_DIR, 'conf/ops.ini')) -app = Celery('Ops', broker='redis://127.0.0.1:6379/0') +app = Celery('Ops', broker='redis://{host}:{port}/{db}'.format(host=config.get('redis', 'host'), port=config.get('redis', 'port'), db=config.get('redis', 'celery_db'))) app.conf.task_queues = ( Queue('default', Exchange('default', type='direct'), routing_key='default'), diff --git a/Ops/settings.py b/Ops/settings.py index b5ab4159..292977ad 100644 --- a/Ops/settings.py +++ b/Ops/settings.py @@ -12,9 +12,15 @@ import os import sys +try: + import ConfigParser as conf +except ImportError as e: + import configparser as conf # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +config = conf.ConfigParser() +config.read(os.path.join(BASE_DIR, 'conf/ops.ini')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ @@ -23,7 +29,7 @@ SECRET_KEY = 'e02$n$tpsi&rvjj7=5y!pi7b2$ku-+@5+6%#va7=oypuglxkn#' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = config.get('global', 'debug') ALLOWED_HOSTS = ['*'] @@ -35,7 +41,7 @@ # This example app uses the Redis channel layer implementation channels_redis "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { - "hosts": [('127.0.0.1', 6379)], + "hosts": [(config.get('redis', 'host'), config.get('redis', 'port'))], }, }, } @@ -57,18 +63,18 @@ } # 执行ansible命令使用的redis信息 -REDIS_HOST = '127.0.0.1' -REDIS_PORT = 6379 -REDIS_DB = 2 -REDIS_PASSWORD = None +REDIS_HOST = config.get('redis', 'host') +REDIS_PORT = config.get('redis', 'port') +REDIS_DB = config.get('redis', 'ansible_db') +REDIS_PASSWORD = config.get('redis', 'password') # mongodb配置信息 -MONGODB_HOST = '10.1.7.198' -MONGODB_PORT = 27017 -MONGODB_USER = 'admin' -MONGODB_PASS = '123456' -RECORD_DB = 'records' -RECORD_COLL = 'ops' +MONGODB_HOST = config.get('mongodb', 'host') +MONGODB_PORT = config.getint('mongodb', 'port') +MONGODB_USER = config.get('mongodb', 'user') +MONGODB_PASS = config.get('mongodb', 'password') +RECORD_DB = config.get('mongodb', 'record_db') +RECORD_COLL = config.get('mongodb', 'record_coll') # Application definition INSTALLED_APPS = [ @@ -169,10 +175,15 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'ops', - 'USER': 'ops', - 'PASSWORD': '123456', - 'HOST': '127.0.0.1' + 'NAME': config.get('db', 'name'), + 'USER': config.get('db', 'user'), + 'PASSWORD': config.get('db', 'password'), + 'HOST': config.get('db', 'host'), + 'PORT': config.get('db', 'port'), + 'OPTIONS':{ + 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", + 'charset': 'utf8mb4', + }, } } @@ -226,26 +237,26 @@ # zabbix配置 ZABBIX_INFO = { - 'api_url': 'http://127.0.0.1/zabbix/api_jsonrpc.php', - 'graph_url': 'http://127.0.0.1/zabbix/chart2.php', - 'login_url': 'http://127.0.0.1/zabbix/index.php', - 'username': 'admin', - 'password': '123456' + 'api_url': 'http://{host}:{port}/{api_url}'.format(host=config.get('zabbix', 'host'), port=config.get('zabbix', 'port'), api_url=config.get('zabbix', 'api_url')), + 'graph_url': 'http://{host}:{port}/{graph_url}'.format(host=config.get('zabbix', 'host'), port=config.get('zabbix', 'port'), graph_url=config.get('zabbix', 'graph_url')), + 'login_url': 'http://{host}:{port}/{login_url}'.format(host=config.get('zabbix', 'host'), port=config.get('zabbix', 'port'), login_url=config.get('zabbix', 'login_url')), + 'username': '{username}'.format(username=config.get('zabbix', 'username')), + 'password': '{password}'.format(password=config.get('zabbix', 'password')) } # ANSIBLE_ROLE_PATH = os.path.join(MEDIA_ROOT, 'roles') -ANSIBLE_ROLE_PATH = '/usr/share/ansible/roles' +ANSIBLE_ROLE_PATH = config.get('ansible', 'ansible_role_path') -GUACD_HOST = '127.0.0.1' -GUACD_PORT = 4822 +GUACD_HOST = config.get('cuacd', 'host') +GUACD_PORT = config.get('cuacd', 'port') # email配置 -EMAIL_HOST = 'smtp.163.com' -EMAIL_PORT = 25 -EMAIL_HOST_USER = 'XXXXXXXXXXXX' -EMAIL_HOST_PASSWORD = 'XXXXXXXXXXX' +EMAIL_HOST = config.get('email', 'smtp_host') +EMAIL_PORT = config.get('email', 'smtp_port') +EMAIL_HOST_USER = config.get('email', 'smtp_user') +EMAIL_HOST_PASSWORD = config.get('email', 'smtp_passwd') DEFAULT_FROM_EMAIL = EMAIL_HOST_USER # 数据库管理用户,该用户需要有grant option权限,并且只能赋予该用户所拥有的权限 -MYSQL_USER = 'cc' -MYSQL_PASS = '123456' +MYSQL_USER = config.get('db', 'admin_user') +MYSQL_PASS = config.get('db', 'admin_password') diff --git a/api/__pycache__/__init__.cpython-36.opt-1.pyc b/api/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index 2a08763e4faeba13f076b9f5f7849447a6feeb11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmXr!<>i`Sz!c2@1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFB$!k)Z&u-f?|Dt kAWkgE)Q^wP%*!l^kJl@xyv1RYo1apelWGUjRSd)o0Lw2HE&u=k diff --git a/api/__pycache__/admin.cpython-36.opt-1.pyc b/api/__pycache__/admin.cpython-36.opt-1.pyc deleted file mode 100644 index 175d66fb5033ca3943253bd8be42bbc90416e83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmXr!<>i`Sz!dGoz`*brh~a<<$Z`PUVgVqL!jQt4!;s4u#mLBz!W7J)$@~&1%Am=3 zi#0JNH#5&qlPQWXB`Yy6Jzp<5Kd+=HGpPt)e*hH1e@AOF12~FBrr{fdBvi diff --git a/api/__pycache__/models.cpython-36.opt-1.pyc b/api/__pycache__/models.cpython-36.opt-1.pyc deleted file mode 100644 index 83d5b8e38fbce2b29d3a923881093dff679d78c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 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 diff --git a/api/__pycache__/views.cpython-36.opt-1.pyc b/api/__pycache__/views.cpython-36.opt-1.pyc deleted file mode 100644 index 754c53a83ba853ce7fb4cb5ce7ebb04285eac388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5884 zcmb`LU2ob}7{_fO;D9l&33=%YeJ^bqwpG(Mt*aWPS=(t#BawEJwaFr!LuX1bJtnEr zt4XbTy{mnKU2I>;x6?H3E9`3j2M!5Xo>S8BNeUq6*#(dbk`zHMvMNYbk`l-zb{XWd zBxR5*>?+7rNtQsavFjk$C0Pc!!ES=wl%xVuW4AzVNwNZRn{9w>NU{oYhi!svO0vf4 z4W;(cKQx84n5P}v{I$ymu9xX^acH})?eyH5>Z!L{6d8YF*m;1>-9Wg|D<=!djm(DJja(c_~7U<4wA0o^Ve_h z{{H2Cwfbmhzq~xb&^sNQ_t{VkHddn2Wje^vP_X zQaNZj)XlpnM>A~P6z6)OlLv}pNHIapD?jVgv$*)BbqPf zo80VFI8e7T6$xQ`5oYwfo4js`MPj?uaN2{{O);OYF`W+dU75~=5WWPtPkh3}A`v$B zghP+m8Bd#(j0GwdWM>GsEAaT-=SD0Nx3V19w$p3dFJ>5Kr^11rm8nPw+iNhp@3SQq zi7oCm;uv?~8J;N_3p6aq&Jb=l;PKGsMl2Gy^6+kp(|>H^4RD6x=>2IN4)m-{9WR7! z4QAi?Y>7o;n||_edxm2ikwCL7Izsr|#@P3KKExvNF}9lrc8|}z$H-WqS3!1$aJvJK z=RP-Lk+|u!n3(mho}mzakZrrm1MPCdql9p)!{Y~^8?i{-3VWxE&lx|*^jR{{uYA@Y zLh@q>9rz@PMIxy`63$V7hTp<46sVRPc7?FI3xl70R>UH)%6#pJS=U>dG8j0PWPxUe z?3b(Rxz~`NLZasrBNmBRjs`_n%ZwQt4<2%q4iqeoj}>C}K7-J}CrNBd62-SsedaQD z{1pH*$x~FB>7=pt&oC8h|Cm?8gv_5}v} z2Ah1rPE&D%*axZ^-}8fpJs7{A1X!hH!Y@>iJcP@a828UU7h)gilG#HI?Ej}HLEU}} zgJ1}SuQ1&AJ_TaCwRO)Bs8LyMff5^48$=9zSmrTvs90^fr)4nL)W35W?~bn;DqjtY zJ%UOef+_)m*2sd^je?d_f|eNK3N`eKD(GEK&?}Ch_X0r=P(e=`L3d(7H!eXJxuA<+ n_;V3-o&}Bctg3caY4WstqjKPVx=7qjGi`Sz!c2@1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFLnKr)Z&u-f?|Dt vAWkgE)X&XKFG?)Q%+D*F4F12`I` diff --git a/assets/__pycache__/__init__.cpython-36.opt-1.pyc b/assets/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index 49dee40692394b00d6399d35f7c699e231726387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmXr!<>gZ5w~uB3g2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m%M&SYH>+^L9xC+ n5GNKFrlIYq;;_lhPbtkwwF7A^24V&P{ZAJ; diff --git a/assets/__pycache__/admin.cpython-36.opt-1.pyc b/assets/__pycache__/admin.cpython-36.opt-1.pyc deleted file mode 100644 index 43a229486f6167b1ea90ce1d8a6cc9f2eedeb852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155 zcmXr!<>gZ5w~uyWU|@I*#Bjg_WH|tFu>g=rVMt-jVaR2SVq|1UVG3r@WPS-0Wzb~2 z#hRFso0;dQ$rQzxl9ia3p0AgjpI1_pnN$QaU?oElGmrukzhv}FQj1IS3ySsqfjF_a eIJE>wfwb!tRNmsS$<0qG%}KRm1ZpS-Vg>+=EM47D!@x|XY8XQ|ZbmfpaMpcMmK8M=i^QG`R)>OR8dIxxeZ;V)%n;x91a zz4o9Es3Dg68eGFfoC3kCxc33w8vpoFJ|&zH`b-VKxTRL5#nq&`!s(X~;^ zkCm!hI#hw@O1&I(^{b@e{eUiG?+D+QWp7;HT30@B4sNBk*3Io}C%7$K=MshtW4+=X g&S!~g&Q diff --git a/assets/__pycache__/models.cpython-36.opt-1.pyc b/assets/__pycache__/models.cpython-36.opt-1.pyc deleted file mode 100644 index c31136cd5dc7cd7626e5c3c938212be7a55ba6f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13286 zcmb_jYmi$-b{=UodP^f|{2IS)V3z^bW`Tv>WW(BPvm0s`~m=X77`-WkbE zu&ug1eNVqmcYl4(>2r_oPb8u%9=!cG_WeCQ|Iy?67eIa!9_wCTPmkykzCzEa&+z$r ze%>SeqW9Sz(QEql`H%J*y`Tg{A1HmA5&$JALZE~+r4N*_h=3B&lprWk5d$TrDIrke zA^}Q5Q^KGmML#J0ni2seCDNdzH6;p4Mht*5peZp>7Kz26EY_4bC`-grP?l;+0+eN9 z5R^epNrJLmtN>+&ru2idQmg`Hm8PUXSuNIpvPM(VpsW?^Kv}0L8L@t6&(Lj6TFN1x z9ULtQvtW(TtMf06%qBe6eOOwv$MA_B!!LYBulR`(5L=BtGq^8g2EejkEEUVf14fuA zcpoGd$9s)P>wS<|M2#pYF=7sN2E|&u#l^buppif>Y4%|m*NfZGvLEj$u5-J%1Mg{W z_Z_tRF1NW8ePx(7r2D#y>D1Q%)9=>wds_5G$SvkRzb7`J&n2z*jr_h8?~40Daj*D3 zMpy<4@p<34&sgrtuRwk!_jJE_K>PqTS7Cu46c1s6A3EwcR*N5EaUZdRn=Q*MTa`Fg zv3_`F_S0vp)9=h)ykrM0Q|>qA*AXh19Iu_eSbO!79V(jT110(7*Hpi8?QCOaa`y69 zwcnqxgQeZO^CKn~)K34dcI*RP5Vp*bip-Y}siMoLYR4|=qL5WC$=n{@=)?21XPlC- zRoY!Xkdvxt_S%)|%x8)>iJk6Yu4WOeGpW^ao$ z`Cj$f^~SkNO#u>5UG?4g<4o;$XNCfHXk>2*ld5h3_u3(0?#@*TWjl^_ z87^67wwN0=ce&et`EqUI^Pyfjh<@#0rI>%JV#*cXK`;VU3aCnb!-ZV&Njp%i6bf9^ zPVkOwm!snjI+>vp6hf z*{lTd-Z=eP{qPa+wTx;kcdAwB_%tqGY&?Jb(d{VZ_S_S7@^rca2v{4QKniYl=L=?~ zA9TG`+^lx?Jld^uI+W{?vwI)ix`h{|e(G>-@=|?rx_K9k*ul!Se@&bDFPDj{FFofxw5iuo%vkbHfFNGkd^|&FomAB6Edzd*nUf zij)6YwXtmC*o|2mAIGBx->5|EhOt9-fEc@rCPKgo`vUmM4ajbL*Dpzv$vz~=Q?U%G zJmE+ZKtYdEKBn?CCz()r+A>M_84Ajcl)smf?^ALgCD58Z@&P31gBDY!R6b4ljLHvC zev!&Aru-5l*rFd${y|C}qU47}T_e9s`8z2YLSl!qSy39vW{nt6I$J(8W?DuQs5pCBs!YW^^I6d&H+0mbsq?zAS{DpbQ4sGA@_^wB`>@t$7 z?wE6m(>q6Vg~Fr7vbo39UB}%c+lzm07EPHSd35_`A*5+pYWx9JX*5@am>e~W z@j1UhugV4d8DGkm@x}2=;TOd(sUAPQXZ%!>@pE6EBiS+zHULkaBYBq*F#GleMHp#F zM8^Fv3;Om&U?}*>l7ixm;yp$-6n?Oqpg!X+N{T57P?92zHdG6ilUM}R-VbU@EQX0e z)TMY!!|({g6lnK2$n6JQl;uoW1WJV4tq?20#p2fcDt=$WEmm`lHQa*wS1s0Zjb&Uz z@x6{~47w=mnX(*|72L;d+-4;V1DG%{4DNtouu6Ofg6eKNzLWL;W~F`T;I^y)rM=sV zxN+)Ts1V3`Nr#nn^X#jy)z4fY5}jElRj1EZr)G#myFTP&Wx*Py)v?yUbM=&5iUvy0 zDs2VTT|eol&^c<0m4&KMyK=no=8+~zswPQ_3W=zlJO8}#{*~Iq+mNrU-9>&+zHHe^ zVUFZ+NFg(G(EP4mTl&%tSY~0jk=k3bNby3)DjSLWtzEvZrZ?256rxv~s@al2RJCf) zk2l`A$}P8Se?r*=yclXRL90%^SAXg1JhjY~ny}QqI@_w$Bw48@{`Qf^>*pKqPB&lq zgbB6d$7(RFE`QNHG2syEZ%#E%ovcrOz=ZmX@$BX8!5)zhquyHo;+_HJ=BXTWu z^=H&5=4vGW1Qa_=W)&%KJ3I!V3Ts-}@vRDcs++)ANtWfGQXfC2J|Zo^*ID3+oCOT#C3qgFobl*x5OXTITp+;wln^eUs5{{lE`k@gvX*1k7!<@MKf+% z5Y7D_(TwXViDrl^eNBb9iit%KS1awrHgz%4@`?_c`+CwARE`2j|ju%O6&4Y8N`}Sumi_W^9Edzzl+4@VB=d<-! zD$j=6Z&d!T@kdf;sQ)*V&mqByAErDlhZK~UlvhNWU!cJbJQmrP4z?W=gb*&NhG)wN0-Ny6NAY5fVlpE_Feuyx29&c#v3AHX zic>)G5lGdbtp!YUvSx&zaFD$g)|Qso(@1>|v`7{wo1q@+X% zb=w7maXp)Fz+lW(tvdwwVjP0Ll|s^npc1f>N*4&f%s1P&5Te>c$nZ-7egk%Lr*_r2 z0qAnrw54eC{6~!=@7LaXRY_4=a|oN-v5%F#cLTXtbM<#C;WpsqT>)-DnH|diZst4+)v2?B6JpWNymMrF05>Kbd+-mPsQ#idkSOG zpcdW89h7N|QJDv0w2_b}FBr8)7cc zpMn^xZ#HF{=Rd8Td_|$Gt%4WNqR-xFmta>dg7sPrjICA7I^F_mZJ z5->n#rMa@pRVVRO$h0OTNC0 z66Ydh_U;P^pYY=^+{TckLF7X8We`7n4TLu;?4pF35^+%?Oo_TEQKrOPlo(Uupd`3o zWtP&nyS7={FUTxS+tIDKM=Id+JqNcgx>)AeH#Fo|{*LvSf!kAa@dJ1wl;Z(gGDxMX zD4~Am^aOMRKBl-D)+b)5zjJM#*Tl2v zesHh}kF^qsv*`TQFbH3L0KWQw5fpuxdg$r?_SDrW=qHoHHGR8}m%)xO%_@}2ibK|3 zF1LnXj$<_WTO>oFxfdF`Puug@e$ft) zd^=)R$Qz+|a(}5%flongtMY{#%6Y&Z2Av<4xuS3?!C9Rv@C}RS)cr&}hhg5uqfZ1m z3Y;G%o^A3H8`;}?~Kx-*oUn^2j3*N<)9Qk%S5d*iVD1(8S;J-S^{n)eZf z)|GCC;}?~EV)Qj^j2`84g-4W5<%|H$hl^X9M6zSQj^bFG1beaf>sqq&jFGVtB< zPOAybKL><_n>z>piXJ+hgM|z5w1;(a4NGFn==ad^)iC2BD7ijo-sOsNnR&sY^g;JC z^a6(a7n(;3N&5_ukcWV$QqOL-1U$L=905<-*9^eiK|mB4I&AdNdl2uvA|%2vdJxG2 zN`xsZ(L794n!bua@T|&$ z-M@UOo#+sSZFc{%g33A{oO$rp#BRzc|93Dv&nO>?%@x!?LN(=_V7o$pxOVvAI0j>h zm&xo%saVd9l#OL`=w*bijO{HIO=E61H~ySV+x&0Du9D^f^#y`H4pWI|y;~?8L&<_r z7-Cc^3?cweMA_v*h;;Cm07mfD8If>LAUp;; zq!G!eVOkeBvW>04rK&0U`wDeP7KQHc$T@t{14v<>v+YeGJ(6xF^KjW2!#4}mFrt7I zJVPXU5uf0l?zg`s{wF3eACMjIcP>DN!GS_yjB*GDq9_Z4UmP4JsH6=(ZgOM9(Kc3z zAMH#7;!+4tfb8@07I((n4z%cmIbbI!0+4-#GO`$O*@IN0C`EdY;62Cz3JO(i(>10{ zS9v=+ZY}eLNkSEIXoPf3i07`RB%p)03zIj*TU%^(hKpyS3l(N@9TTQ-5+j^wM!l2x z_E`CE+8g3sU65FbZR_j{P*~xwuG?wNdI1LhVr#@TQwlzULg=%O9w2z{RJwXD5%WKShGk{c}*%ubPk zGz%S;;aB$mdQc=wC4yMv)tTD0mvn@LOC+&0n!P^RxO7IDjR*{3QAOzFLUNG3bEf{v zX9#IfR%W|DqP}#!30I&NYaGikd-*EHYSO}U4{Ge%_{8kx%MN}gd(fp2Kg}hHTs>2kCqT227^;Kh50DUDq?J@ zyE7efr$fmIZF;i!Z;%lJ7(mDhw}$FBlc2-wbss_p8fC- zh}uEqjK;CLQt1K}-s+ckU`z&|houGM&NZwHcTY1j*&K7jt_9}i7GP~jC#(%c=HN&n zhd;STmI@Kox%_cV-q7Hf=!Itp2c zD;dLdd~%oiq;;CAYrVBBqbs{Bh-rU7 zf;poYf(Ztk5a)smnp3sL}uGd_)KQF+yz%ZKOgSnUzcO{fgCE@OLEBNk?dpfCQ+lf&^mJA+cZaK~st9vjO>SPDh(&ePjHQwW_a#zHiyLbqNGtta2f!^b3_a*_ zX|7I%xjNlU>GVWhonEb~*T>wBK7n~ZV9-v5eSk1GmoXnC%q@Tk0tf19C0!o^TrIq}Wfkz)O2^x+@Ky)3 z+h8nUx1$Bo5W54ORSv&=cuv231ZLN;kFwQ5@)~#xg66fXJ?jQdA0th7vJQL)>(;@u z-XZs{Ipy9hBw?ICPCopEz(~7F@$;}wcyo_LsW z1Avn|WG{JqA8|bbT>FV@(1trexJLmeV|DO#Vl`xo)gg9>9d@ky$eimQMycSBH^R6Q z#+zVVCHC|am-NjD8(~j6bUZbuj;Dn+=!It}*3XiC7}sND-*LdrgLkDIheq}sd!D_J ztrGk21Utb_I<$?>scpIO*dv- zzhblMt7O&JXvTHGy)5d6)qI_}U$t?6gSfv5xJ3}H7WOUp{5JazMu~mb#`!(s{JstM z1H%0faMI75{QRRb=EsEj31AjuKCqt>=4WM|mk9H7z?4poUy$ry+HkKCE(bU~F%)Le z%-7lREDxNsv#`KsSdslI>w`S3XTOH$H;xGWcFqX=PORhiaLWII{ZX8SxDV{L^-qx9 zqPDU>17!(h(O=j_I(7ca{>uL5(DL^=wfqBSVjeZYSPtWQ5$AthGLQbv{>}d5kpJJg zToSv zp}1T;xVqG(t>d+=hM}45dTL{gX*zeu*lpasYGsp`ht!Oj3P*HJH8sX-(t0eR>V4r2 zS|1M@njTZ*vCSF}ZPfIxl%a)_YC_|UDoP8dNt{3yvER$ggOA)RN36*~>%ewvZ?6XpqY{5ydjk~!cI+19=U)3xN%;hE7_V5!`f>h6w3G(oU-KW_D(AVR>xyfTih7LmY^1blll=b)?2#P<_lY#|+SxoCzGjUVI zM>-}T4NGS16VE?t4V>jQk|Zt>HY&(OYDiKIQ#CV&4oU424zbR@l$+RHn7mMQqV^!l zUE<0g=r0}~&P|*wddjHb=X28+3WLW*hzq;V}bJKN-Rw9%+(;Y*q<#-kIsyp&JR7D-}z{6VoPrF2xNPH+dyt|PjTd2lUEqX zgFRY29X7T5&5EtUuKboM8Gqao)#WW=@L;RR<&UPKJg9>{SOPc?Ey?fC=B9_i_xYV? z!G((SwI8=UxL8UREY|jZYxG=`+m=ASh%m&)ls|Z;cZ&SNsu%UP;A^}myq>kaq{Lx`qzba(mKe-{1j52FbCQawnD`Un6 zX+N)F0EaiG;+cddL>5L)6pjpmVZ|K-M3rf6qsoNj)naaCOVCugB_y#+SCdRsTS+Vo z9)-;bHMb;MRBjuCH927IJcxTLD5M+ll=QirpC5Q6e{7mpiS!~F0yZ|+%Ky#MFsNd| zR5A=#e$9kqLD%AVZpdT7ZKkBgr?!HrmHe28P7+$BDDGLcvW*8~EaLR|&I{!68YDq3 z>zZMd;{nv+aqF=yTu|wx5c={Et(_NUwhk6fO~E0-YjJwH`b$NQ*a0)d4(hKF23B6X zMpjj6ArDcJ4Pzk|^=9VmSYhx*D8S+^H~Dlv`y?p6D9YgJqchXf)?+(nMn<@IQ>;5y z#P3+R=dSiO#VUX>u4*T0gM%v4 zwfHut9Co$tA7MECD^`V-Y+G?3H|5jDdB?CSQft zibImzR3nc}8D@-Bdm9E-Z17$Ct?YQ^?S=fnKyK=J5kLFsD(w@oB6K-c^|%PqKxAllPQLlO2y?;R+1UKQ%#VYg1VXrSBeo~AAhM^n z)DTtncX8;Y!qyk8Cl86eis{sUO2*pOF4EnEE+S7O6R}>Jt@O1uUwi~T6rX$p)A9+Y-?X% zN--oPGl?!umo-uN4d}Uv=ko`~dCkUI3`J;7UfEY+kO!ujGS#@WOPo%H=O&?lfF1=B zMbNl!19(-FJdkktCngHJcEYZMR=m$JwS;gWH8H2A3R6d+I|6gU8&zE%Qe@A-5T5XY z1_xs*$>$@R03k=PsoyN`Pe!vnLxf+g(F;;alkau6t>~NN<*0Nos3gCrI+SXZhkn!o z?IaH&9spT&L>_{mi)k8xHCxsg~Qt*k>Tuw(+v+cxqQ4Q5?x#%$_1z_wu5dUw0~+#HxilM*m=u} z+hU#HVh!w*cN7t$+{9tHE=h#2M1r>cYroK-X1RY!VX1D^cF5ZiEg(dfrONIqh(sz5 zy$p@jMKnmB>{uNiI9_TNfXSM87F;aO75Ro68}AR2Q(newt0Q!|x`QqSpu z24=IoI2z5+R*Bm-{vsoytYc5itHgzK4FupSc-8R+0Ps?TuaWSZ5q^t=uSFPtzyY3R z2scT1Il|XV7_VJAp7p?U6T)wo@H-HGr-a{y@Vg}}_`4)5`0>{wm@D}4MhURs*CgBx z|MaMYdk~IESjgEdVIk);5*BhkD`6qW&i}BDf566X=h<)L8MN^nkg(7@WaBwx!ymKZ zPf1v;=d_Jy!p3vX#xp5lvF0g+ui$~O2wgbLtHW3kGjR>zP&j;FMvY_fgg1XI88hLl z86ILS`sb}kyY)jviYV-E1}1iU@d~{;Mz%)b#OJ5VD)V&U5iDNAAv89e5_YZMpN9) zy5Rc{yehy?h1}nM=h}6*w!xQCYm?f#6nw~;{_OddvS+t)@PEveCZT@-7Y>LwyPL#`y4JjX@6GT1=J_|X^IpB~ zwm-f8**_IU`AeC24D=Uq@T+J*0X0%as;8>b*CK7Cd-}-mj6BvO)3ZKMzyR~H0w&eN z$``s<0sXGhvR-1n(o%)ZX_^M{khe79j)Ecc(;$htuto{ch~FAW+~G5Y&LR%}9~!E7 zDkz=?s;5&UG^vIBD!eh&JR4&NG%%*ro zfD6@aa{^U+1*#5Hr%(+dBn+qaAO2>@br00XU&rfm5n38!vHATnk!dZ zk^&-4p3P);FaCJCxBKnhcTYTr`J)0R%=|5E%n%+WX-i{u*?%L8g9jNUX)>hgeagIP zl;u&vHU>U}vbI^Kh|H0ZKk!@#_(nPFNI&Pig`}438oxdT{WH=(JK?`J;m=EdR@fxp zBtnEs2yR*yQS@tsJjnb=ZX8CH@?0<-Ys4IXQn;z)g7yn7j^zdoy7)7{(vdO<_Uk$HPQu&=+=ouJCIXmD_jL zdMnF4(OC84&0ZpHP9SENqLi}rT)SQ=op6&eE$@L}6!s3Tk(+<7ETojD$(S#!;V5KV zIKDF$@a$hCewHTWVyAn#bE)$_>0at~+v81UB8iQIFG@!;iU^vmO7-!h07dgng~p Q$m?>yxI7UxwW-?r|M*Cw?EnA( diff --git a/assets/migrations/__pycache__/0003_auto_20180705_1738.cpython-36.opt-1.pyc b/assets/migrations/__pycache__/0003_auto_20180705_1738.cpython-36.opt-1.pyc deleted file mode 100644 index 53fce4c41b8b82c24d76626a9d58abd9f60ed1c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1197 zcmZWp-HY5*6i;q4nPfh;yY1Q!u-jUn24r@&tF(fY*433F{lG2=(}$3mb2gJSAJcm? z((RLrA}S0k6%~r0f*%OB-G@?Z75qQ$Yj)}DK4ubrhOnj}C2Jum$gu%xP^6_%ky zuLWhWhvqs1hio=fpb9mp4-K-+uTL4ra^7Qou7War;%n6j2fb~$<(f~@v=5PN*Xy@ngo5y%5C z3T~pTeSo}^3Um`MMp^GXsg!RAhl!o>SKH&^-O-~jAAh*H^YG5(oBKO|KG?nU+2lAm z2Q?Bq4{wh?|6%mSaQBz(h9R9EMtwKK8yTI0cf*Y^@v|PUQ{;2?V~o=YOiPTudo=#` zxAE52-rw8QdZ`n6$u&NwQp{u!MMZY4&(jdQS>D{unSz$)<-$nE?xcxJXN?(3mZfAc zb5PcLfDs5;Bh-ZU37Zbl({rLY4v7y+M@a-IAk{k6zv_KccXd@=h)`7%$P5TO>$V zAL2&~eL?BRls+eIH&1n4S#ez|HHeV(n(JO4c#%S;c7T0M0F!Qjf-_2#)s_6nFQ~ES zhO#*4Xl7Ow3DQ~VdAv|7t0~98Pu``0upsmjKa~tR(#|QQyCch&-@CN-_R5;H&jA!k zb5~+7iq0n)`Z%qV5{1QO`&Hx13V;&-zP^~D$kM)8yhN*Deev1FT%>7U{@*k&pKkUy zxcUi{X^Dd*Y{N25ow0d+zdo-o7^Ksi$22VI6rDGrlcO&HA9-qQ7Pr4S#l&Bsih1s{ XP7Cc-a!C7)g6A`eH=){?)otTHN}P3} diff --git a/assets/migrations/__pycache__/0004_auto_20180705_1741.cpython-36.opt-1.pyc b/assets/migrations/__pycache__/0004_auto_20180705_1741.cpython-36.opt-1.pyc deleted file mode 100644 index 17dea73caae8e60f2ee68941e454ec1a3907d239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmZWnJ8u&~5Z-&{eAppCfD%N3bWME5K?xFyf&%Ma^pCBMHV0!Gu!!<7 zEDf!>$Rl%+M`w|d8Pwny!apu+H)pt|9SXrpAy4|g-=^W9%;`D5weGL^=V@!Ly)Ns5 z@kfmByE(mFlv$Xv+Y>-e1I6&yw;y|NzmHxI#~;3UrnI(`FnfT#37^n}Wl`CaW;RF? zS;sWnxnNYqdj@)_j#V0Z;GMMY$1DNq6j<$X&Y?;_e)Dl}=j&+q<@nt*X%;yzxrS9I zwyIx4(dk?tf8HIvdhc1>MO`ie>&9uA&>{)DOiZCb9L1&J3NUXdFK2+vRN46|6^SiR z=a%wQB|KL;v;s+~bSXv9gM{I^PU*uzn5Ya&16HsMSk{f1;JPZ{UP?;FuPRF1P#3k! zy>P0_`jsif$|~Kwzz$dM=o8_mRB0uCUuc$0lzAbVw{TBK&^&l^O`O^4e=}QctrSnW zde;iRID^75Y}3?q{Fe2<|0nkK%6|)|SA%|-MfnPBS0pOnmGJ=9^mH2YO6TIV9UF?D IP^_1XKYii!p8x;= diff --git a/assets/migrations/__pycache__/0005_auto_20180705_1758.cpython-36.opt-1.pyc b/assets/migrations/__pycache__/0005_auto_20180705_1758.cpython-36.opt-1.pyc deleted file mode 100644 index e9e9ab815ee759f632a96fe6c498571ef9753ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmZWnzi-n(6h5Dw#7UjBX$9#BY+jnAG_**lDic%N0VacVy5vqFm1CPb8;Q9Ls8R(3 zLMlI`R$`zN3lgCGC$~bP<_}KmS6pnHg6WbqE3>0u#^(jF)$ zjO4#kTr8@PK;>fE_W2%cb)Q8J;2ev*=DJV7ZOye9;3dr$GVW+z25>ELMf0l~Y8qCx z)mAo1 r8Q7>`jp^AQ^q|NNU?9RZ)=s6S_G$KvU5D$+zLV9vt)og^mSg?_&kYM; diff --git a/assets/migrations/__pycache__/0006_auto_20180706_1821.cpython-36.opt-1.pyc b/assets/migrations/__pycache__/0006_auto_20180706_1821.cpython-36.opt-1.pyc deleted file mode 100644 index ab4d0bbdf3603988926d3e54b26922efadfe800d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmbtT%}>-o6z|u5+T~LP71Vg!gX}Jb4-=z!A~69D-qu4?_6?h^yKR|iC3x}!OeEpJ zO=V-U@gOFO2cuC5|HxdWEM7f&^0m9r;cS1ImziIG^XAw0rZ;lA?Ch6250*2M^h**R z4d*jB*fk6wfn1jwa#@z8SqT(S*CbGhTvMK_Wd*eRQa zfnJ2j^g%yDWCmamAu?y-971Hy!w^DbhT#H2WG=!bgvgA*D5A?$^>Pv}V}Y*n%-nHh zc+zByc#IDfi^U1U^gYKIFP5f@Q@AQkO-w%?xE?8t3MHmT49{v1U&q27KG{3^x_0pM z{ZVTtuky4*fl$k?a{UpZiw+}(Z8iuW6jz2@_o-RWD_o0SrW`kF4^J=p%(4k%K6YO^ z`2Hr?XoYzdn!+_rW8hh^*u#!nzZZ%2yQl5#S0^5L&L-Z9Lr+Qex7vHnSkm8>R7?up zOv9Mzu(^rn1+RD7`&+?gE7t4I(vnpn!lA*&+hF};tVp@ksga5o`TpJd(ca!g-#kOj zhPdm+dhkiG+QUf2rpO8~oe_$)>na9Bo3W^eIZNJ(iLHsc7}e!y|MS7# zw^);7odJcZR{UhS6}quM?c>hOz9M^{{c_3W!T= zAa=zfj4HU1_us91gw8oY>I>bzW*rwlA?oo5iH?M4gyHYaf=AGn%L)rPI_3-U?^?ji zIC<(aP8y}@@zR*PN>$vS#KG=iNUKRrlNGs738VfWG0HoS7dZnp)2=#Wuo!(+#K+D% Uvr#;nr*Cyib31gz!V2i>KZuQtMgRZ+ diff --git a/assets/migrations/__pycache__/__init__.cpython-36.opt-1.pyc b/assets/migrations/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index db70fb9cf8725e19acdaf44e847d3718d03435c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmXr!<>gZ5w~uB3g2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(mzI7>YH>+^L9xC+ y5GNKFr1DR0_#0&sH@*A)K diff --git a/assets/models.py b/assets/models.py index 86950617..38a5fda3 100644 --- a/assets/models.py +++ b/assets/models.py @@ -25,7 +25,7 @@ class Assets(models.Model): asset_status = models.SmallIntegerField(choices=asset_status_, default=0, verbose_name='状态') asset_management_ip = models.GenericIPAddressField(blank=True, null=True, verbose_name='管理IP') asset_admin = models.ForeignKey('users.UserProfile', related_name='assets', verbose_name='资产管理员', - on_delete=models.PROTECT) + on_delete=models.PROTECT, null=True) asset_idc = models.ForeignKey('IDC', related_name='assets', null=True, blank=True, verbose_name='所在机房', on_delete=models.PROTECT) asset_cabinet = models.ForeignKey('Cabinet', related_name='assets', null=True, blank=True, verbose_name='所在机柜', @@ -36,7 +36,7 @@ class Assets(models.Model): asset_price = models.CharField(max_length=100, null=True, blank=True, verbose_name="价格(万元)") asset_create_time = models.DateTimeField(auto_now_add=True) - asset_update_time = models.DateTimeField(auto_now_add=True) + asset_update_time = models.DateTimeField(auto_now=True) asset_memo = models.TextField(null=True, blank=True, verbose_name='备注', help_text='配置说明或一些注意事项') class Meta: diff --git a/conf/__pycache__/__init__.cpython-36.opt-1.pyc b/conf/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index 3ce5601efca76a7b22d7d0a720086c4b401a593d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmXr!<>it|VTw*?WMFvAfCPYi1_vN6<^U2Y3{eazjKK_=Ory?A%PfhH*DI(5DR4yE@A;2*u z7pS4Qq$sf@zX+rvC9woy8d!~yfuV)IslJgRd2V#hNX$!5Rd7r$$t=q(sRTO%YB_>} z+hIk9C4QQWx7g$3Q}UDJ<5w~iF#$stO#G77FG(#f$uB6@_XpzS{Jb=Mr0}`LVUwGm PQks)$#{-HKAZ7pnjfi28 diff --git a/conf/__pycache__/__init__.cpython-36.pyc b/conf/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 8d3868d98c313080e0c7d564b81c0932a4b855f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmXr!<>it|VTw*?WMFvAfCPYi1_vN6<^U2Y3{eazjKK_=Ory?A%PfhH*DI(5DR4yE@A;2*u z7pS4Qq$sf@zX+rvC9woy8d!~yfuV)IslJgRd2V#hNX$!5Rd7r$$t=q(sRTO%YB_>} z+hIk9C4QQWx7g$3Q}UDJ<5w~iF#$stO#D)JwTcO-OwLFw$_*&W&q_@$DUR_kD2_?a a&r6Fz3aMKhHo5sJr8%i~JfP?SVg>-817+C& diff --git a/conf/__pycache__/logger.cpython-36.opt-1.pyc b/conf/__pycache__/logger.cpython-36.opt-1.pyc deleted file mode 100644 index 8f2b369c7ed805d0096aee068f20285e86b01458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmbVKJ&)5c7`BtNNt3pm5F1O@4qV_62vrDC?m$9OjM=yftB8%N2_4b#!6z~ES$x14FN5X6yN)Vn~7WcLUo6yN(_i_WISm6nATE`t{OZy^_Ra{s}T>~VH-Gj*riqAgjvT5EpE_1>wtYJR<6 zwOHPu$4_`MbiTkQ-oQniigv?GV3A^4^R`qbScC6V(qGE4B_=Fd#Xr`}1Uto~2{uA% zGp4Mo#eQ*Q!aS#9o#!UBNl?Vh2jJ3qDdGP?CZQFaO*o(Qt;ZA4t}FD`1eM^eiC(NO zUgl@7-;<$zZZ(=o$@CldMrJ-J$$NPuv4XCN)in?^>*WpfE0TAhqg#I8%`{V5bSirX k)1ENv%N=)n6FqGN-PP>b6ylXl3UGv{Fe2}^7vb2AKZXj<@&Et; diff --git a/conf/__pycache__/logger.cpython-36.pyc b/conf/__pycache__/logger.cpython-36.pyc deleted file mode 100644 index b1cdc3a3c245e2215f1cd1e6f7d5f0c6d2818569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmbVK&2H2%5VrHP$)>vt;t6u$um`qKM1{5pb^C*agi1wkW~C^^ZsI7hBimbPx$Z0U z)Hmom@Fcl%;>4X3<75}O(y=o0&3Jyk*nT-4N8Zul=UWG%@8}=#03XArDJY5vqL?}r zCK#++Ikih%Y-3*K)jsh%>{J6XV1qI!L*`ST4mK_svWN{g7$fFxEiU(Hu)$=+ED8aQ zsdI&xk_Dw*d@*}XHSGsPRjrI=fPu`-2JbDPx5 zg4SGcZB%MxS3y(rw^5gK@chN={loo(hp{^?QjxQGkr{r&&AMZ;8~(@cM$8{D;|JUk zx|rfNx`u-|mExM`;DslPtMlaS{U_pO5c?YShcbh|C85qzQAlk_kP6MeRBSqFgCwCc zOA->;OfGUV*@BsEz;gx91d-9lM$a@e1~RmAA=Eljw_cN)qV-D21=;IIC6-U?H;M~G zhB-4Ix@#eicGHtSubpg3Z2fzrB52#GUr*2H%gc3Eq^iDDvSgXjOJK0Hl$L${tXa3= cn_ALU#omsfQa=IZ;Si5th3;b /app/conf/ops.ini < /tmp/create_superuser.sh +/bin/bash /tmp/create_superuser.sh +echo "yes" > /initapp/inited.txt +fi + +export CELERY_BIN="\/usr\/local\/bin\/celery" && sed -i 's/^CELERY_BIN=.*$/CELERY_BIN="'$CELERY_BIN'"/g' /etc/default/celeryd +export CELERYD_CHDIR="\/app" && sed -i 's/^CELERYD_CHDIR=.*$/CELERYD_CHDIR="'$CELERYD_CHDIR'"/g' /etc/default/celeryd +export C_FORCE_ROOT="true" +/etc/init.d/celeryd start +/etc/init.d/celerybeat start + +python manage.py runserver 0.0.0.0:8000 diff --git a/install-with-docker-compose.md b/install-with-docker-compose.md new file mode 100644 index 00000000..71b8351e --- /dev/null +++ b/install-with-docker-compose.md @@ -0,0 +1,35 @@ +## 使用 docker-compose 快速部署 + +### 0. 安装 docker docker-compose + +见 docker 官方文档 + +### 1. 构建镜像 + ++ ops + +``` +git clone https://github.com/pythonzm/Ops.git +cd Ops +docker build -t ops . +``` + +### 2. 创建数据持久化目录 + +``` +sudo mkdir -p /data/mysql /data/redis /data/mongodb /data/ops/initapp /data/ops/ansible_roles +``` + +### 3. 启动 + +``` +docker-compose up -d +``` + +### 4. 访问 + +浏览器访问: + +``` +http://:8000 +``` diff --git a/requirements.txt b/requirements.txt index a3d1ab70..34801964 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,6 +16,7 @@ cffi==1.11.5 channels==2.1.1 channels-redis==2.2.1 chardet==3.0.4 +configparser==3.5.0 constantly==15.1.0 cryptography==2.2.2 daphne==2.1.2 diff --git a/sources.list b/sources.list new file mode 100644 index 00000000..4cf49767 --- /dev/null +++ b/sources.list @@ -0,0 +1,8 @@ +deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib +deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib +deb http://mirrors.aliyun.com/debian-security stretch/updates main +deb-src http://mirrors.aliyun.com/debian-security stretch/updates main +deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib +deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib +deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib +deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib \ No newline at end of file diff --git a/users/__pycache__/__init__.cpython-36.opt-1.pyc b/users/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index cace651732a3719f00bab7fcfa233e1038c22912..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmXr!<>g`%vX5o}g2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(mz;h{YH>+^L9xC+ m5SJFG78UEq$7kkcmc+;F6;$5hu*uC&Da}c>1L-RUVg>-%FBZK3 diff --git a/users/__pycache__/admin.cpython-36.opt-1.pyc b/users/__pycache__/admin.cpython-36.opt-1.pyc deleted file mode 100644 index 9dee1a7e0eaed153d6ebe36366c18b86eeb1001f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmXr!<>g`%vX6FRU|@I*#Bjg_WH|tFu>g=rVMt-jVaR2SVq|1UVG3r@WPS-0Wzb~2 z#hRFso0;dQ$rQzxl9ia3p0AgjpI1_pnN$QaU?oElGmrukzohj`Qj1IS3ySsqfw;6d ewWwGhtXr?3@)n0pZhlH>PO2RvP<=5FGXMZsOd<*Z diff --git a/users/__pycache__/apps.cpython-36.opt-1.pyc b/users/__pycache__/apps.cpython-36.opt-1.pyc deleted file mode 100644 index 01c9e376f12566267e997fb051484b706a20e533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 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 Zm_tIhM-_voO=pKwa2_c*gFNIZ^f{-` zty{;($ID;->-E=O*pW*8JGJGPMgKJ3@Cq7Ak>#a&R>QJXKkcO(8U4-bZ^p~@@{N42 z&?qGH#bmzJ$XrNKmU2HyQI6%i^j&LI$ z_@T`A0%Bg+Qgox=UUW|54S$wSrC6$AQL2$93(}}#HL@(%%`0iF&@GaMCrFy4y($}=^&jKxh*I~RzsHXQ<2ey-r(lPqFra6xBF3f*}PS8nuj*ine zwXUZU{979THa&0f&IG-H=SBL??F^kx_F3rezLjdHvD2AVW7{*2wCzc)&smyHY&DTteER6oqo*9#ik5P z=Jec~j>r5CsK%BsH7|lT_n1s`Ixo|6v(>DufJfl81al)sa;z_S&lM}qn`}jvu!6fD zA23AnoxmROxHq;L&mrM>f0J z_jrp(-ii&~zyP_9rL0#QOl~l@!^n-|5Ly(7wcXf@WNDdseJ5f!Bcn`FNm90x`Pk>z zVm7GG80kuq(P%^hWnea1fp8v1VQp~!3cD6_!Kh{*J8{%*ExW>P!7ZU32)oU0Fj2EF zq7DH$Y!mPB2pjUrK3%WXpRFIMJ9glEE4AUTl~wa{8xtZBPLGA5+hL*D4OnbfjVe&G zd>y_aHwr|U7`@F!;`!l0Pz=f%u+?^|88N-FT)U{W5herO)nqcqdM@{d|5eM!b>DW0 z1XPek<)_GPw+E-T_~^zmgPDc0wXsvn^_8=2?ni-fo=ZLM+aZrwZBWr15=Y1qSi(a5 zIvcP@@*KH7gp)n8o6L?(q{7R#Sy{7}{E&I9m4piS!w6ongSL&r&Q#F{Wh;n%xJc&B zA~^=bF{c}FpV2@MY%{2)#V%ziZ6h2GP2|gP3`kr-v;N-u>$m^D_Vds0fAZsMc8f`I zuqA79NT3cIOzBTpPXevh_dA2h1UvL<{ZOxdi0X+jS&I8!;F1#sGT#wF+z$utA`EK! z#)>)xn#>Duh}lt4vp3=rDbZok|D^_wI3GC;TAR78Wn~aJiHn45P3l;8a4^cOVm>IV za#FjXE#O4~LP zVk5C@g9$Bpej~33n$Ol1aS58-|K;8FcRzn{=dLUU{ZJP>#I+VYy|q9&eJ>WSCyUf{ zBDaZxR|uM2L`aB&mo?el=FFoI6Mb_JDE3?*eiML}u!oC5XE+Iw#_J!he)+|1BVCpR z>jj7%-j9{!^(}LA^Hs~JQ)mUSy&nzfVIFJmyuEhsZ!+I3;=v*(ut1zt&2wmEQEg}* zWmo1RR7f_ofoj>{cR^SC9&O_Yr)7uZ;`!fPv#|Lyl5iSM3 zqf?ZLBOnoVrPc(R#Lrr}hc*bux_(2)t?D6t)K=w$Db+|H`#i$QCo9DI*f{fB9Q8K?4sz_QE4!t1Qjn1U;|9NtVu{1~bFTnIQ0(>zh%Yx~|^|qz)6on?~CMirbzg zpSQqV`An&EbyVbK`J5`vhCwclxQCLgJTeG;CNqc_S)Nm+$52dMa{ZOXK(z+Y7XS=Z zkjtGHn2*D~H8($Fs=J}tzR-g+=McIeGEn(^AQ;ZmmvJFTQxiF*i)!G@!r7UHvoo{j z1TM+&!OYU)OU}~5xhu}4%d_V$%IO((Bf)M^Cl(XO$Z~+%U~b-@r3A-9-TdcB9p`<7 zIIdsDtAZq~Z(h>txZxag5~tMqD>iylNwpH+Cjd+WWPU^R#49l2 zOQ~8c`IGIlKYzZn(I`InnBLDgV_$5~e2Qn}=9mB&@RC(L@8{|J#~92kxE3Z4n{mjMXyA$a#F4 z)W!}clgWuxwOXmXv;$Xcb@Ql7v|)iYpiVpz&;XXQ&MUOO!+GLqw_OJWNzX>Idz8|~ zQd0A}M2d$}KCSc84Y&-jb%gaoq0t@<+QBVW%`;vqEWyT2i+@*sGJWXS9sEqw6`EDk zn)HUeQ=RTUBqjZ)Qg=LZPrclTAGa@B5KBmIB7#VSzRx}0Rp*JYeOTso(Tw4t)6~^> V+c(h>4ch2@bJ&IBGfw|d`~uhJe`o*z diff --git a/users/migrations/__pycache__/0003_auto_20180706_1807.cpython-36.opt-1.pyc b/users/migrations/__pycache__/0003_auto_20180706_1807.cpython-36.opt-1.pyc deleted file mode 100644 index cc3645ddc22f529ab5701905c5c9098dc8dec22d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmY*WyK>Yp6xGAt^?IG%WN4tFpmUQo$xKMWkWf)2DWEci#+xfV-mzCkvNJ;j;HLz*q%-!GrwqL3B=&#dJrYwJRzlAhjK?aCSq>47yw5=GyNuhI4)O<@>u2Ki^;cIQxA4>7pGV_s@&D9oAA; zg)uHE8=Xi!RYr<=R!Mtj)f08u>a2{J^}55ps=Gqibyb`HWMify6tRAjO-p%*t}D3q z5iXhTJ3By#sa|(mU<1+V31LGaDg`ZOC~PFe>ozN$nDao^F6sGkA&th461(xVY@|L= zAj_khSjJ20g%h`-!t@p$yCnLq({}J@chX4HVC0h{TwS#%%jQn7?%N`38zr`qhr7w6 zWJkDdvwovFK6m{#BZPqWJdZLuVh+2rL#*ilX4yPfn=tJn?f9km!n%jgZSZ)J?i2T` Iaal$DFNt=@`~Uy| diff --git a/users/migrations/__pycache__/0004_auto_20180706_1830.cpython-36.opt-1.pyc b/users/migrations/__pycache__/0004_auto_20180706_1830.cpython-36.opt-1.pyc deleted file mode 100644 index 63c82fd9eaaed17481ca34a8b2fc41fc467edde2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmZWmJ8u**5cXsDZf|o5LII^uw@q&0qL2c?QBfr+NVOE!US>Gm$+uqYT_kEKXwp%p zNtgTp#D8&%1f)+zmGLIgMZ(sM=i&K2&v?APo=$$eet*pw`^6rti0lc8+a?7JxMoXU zaL(Q`5Fo!YkjNL}i!200?^qUJ(LI)NpDyP!TQ+l3xswpOUojaI61PhVS;2u(X*%PD z#Ap$Ngot*0CZKmJDAJ=yACgls6Ga~eM6u=v2lv=MZXH_ZxAHt6tFmp3dY(Vq&tK$w zDja?-aG`` znA)iTnh6{5eB6{%jfdohS=rEEmiR<!14=IE>l zV2|JE2JL|X)JJ!Ok5-}Mz~oa?o};9)pCS2nkk{1+2ot%Jkk&GdPdhNmZ5zHh?OA zfCXE=0Kt~O@D@?jUtq;`hN=i#_xQeFo^5U>@4nxA{*^QKgZ*=S;&+J5H3DG36{~p8 zD=+srd&Iy4@rHpwz7nrRF2H}v(%_7IS?bxODwn$G%BD6ptQtUN_MGYb#Ki0nnQa1O zIR}<|Fk13lpuY-$(qXvTfB-_G4Tw&Bh))FBBS@&w*v5~~E7+hnsExgxW!ZIE^j#yj zv*|p$mEDxn`7E;|XK!`0Un+FnEa-i9HloV?nBes7`_qr#et!7!>(i^$x4}Xc^$VJy zIF<_QWp`lxx>w4Mk5DffgR(9vOa*zkxdw?mNN0on5*6&Go(?Fl4hhoOMso0x(k4<; zOs|mmv6P2>p%9_<_9)OM_f?1bq06X+Q^XGrinVN$rp3SO{mk?gSIoih z`J_YBHLaOEAsW^)x%i0*E$GJo3%Wg d7`hue8jKg!*W6W#x6z&ToOfO0#*K4H`~lMFr)&TK diff --git a/users/migrations/__pycache__/0006_auto_20180708_1347.cpython-36.opt-1.pyc b/users/migrations/__pycache__/0006_auto_20180708_1347.cpython-36.opt-1.pyc deleted file mode 100644 index 1dbf524f0804e759279615952d22f6dee5aec79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmY*Wy>8S%5MFz2pY2>Egp}|EL2`5Uagbc32n7ld1)-qA6f2XNvwT|ruxl4d3vC{R zh6maoB$YjlC@sxwSMV) z>^%b?_)i8Ly)FO2OAf(jmW6k8mu0?5+oo34*z}z?QQHGbeQBwOGb87mOfLwKl^(Ft zhqU%ej=?qrDu>Z_1|dW+yYV5u;l#y|P?J5Ae0->G!bzjj=2=k`uS7MCy?9Y9*TqS3 zES9IMrP;Imp!!WC(S%J~)p-5Xy>t$^sU|rthOWMz?_x(^@}rgn%yy(nra|@g`%vX5o}g2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m!^J6YH>+^L9xC+ x5SJFG78UE~W~LVe~s6OK-0WMFvAfCPYi1_vN6<^U2Y3{eazjKK_=Or=&p2`*hy0hfY;f?H-z zs)Ao)ZtD9zvw&P6h>y?A%PfhH*DI(5DR4yE@A;2*u z7pS4Qq$sf@zX+rvC9woy8d!~yfuV)InZ7Z3PIS&l%u7#Ia7-@AEXypZ1iJ!iH-ds$ zVMT@=ewvK8*yH0<@{{A^S27ea0mBwd{F2izNi8nPFDTac2jbF_%$#Ce~s6OK-0WMFvAfCPYi1_vN6<^U2Y3{eazjKK_=Or=&p2`*hy0hfY;f?H-z zs)Ao)ZtD9zvw&P6h>y?A%PfhH*DI(5DR4yE@A;2*u z7pS4Qq$sf@zX+rvC9woy8d!~yfuV)InZ7Z3PIS&l%u7#Ia7-@AEXypZ1iJ!iH-ds$ zVMT@=ewvK8*yH0<@{{A^S27ea0mBwd{L*l>iV3Jp&PXiE4JgXbN=+^)j`1%jjwvn4 a%qfmR3aDEgHo5sJr8%i~JfPSCVg>+CI%bpr diff --git a/utils/__pycache__/crypt_pwd.cpython-36.opt-1.pyc b/utils/__pycache__/crypt_pwd.cpython-36.opt-1.pyc deleted file mode 100644 index 0645aef30e2a75265c5e2af8cb9c7b57a8aee334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3764 zcmbVP*>4-i8Q$+}hw0vn(fsJ{H6e%Gtyu1&Q;vrGyqQHXUEXiG7%RP8O z29nALklLwRG)d#4Mce{Oi#Bl&Ac$+H`Y-yx*NT?(l!w0Mso(5Ul&m@r%`A3yX1;H( z@AqB1I6qJQYxLfaXI~wdr#ABw0scB}+ zO$%coi70{0$a0fFmK_5#gA93MVMbjc34(g{|1FfwW{dC*&Xz7UxzC?IfG(7>G!PY5 z>>*4JadKJWMTKv-R&bwIm0DX`!F+n5QIl`+vLcm~wuCuQNjY9i<8eD(euvlL_I$My z25Y5Om9x=hh41ppKs&}{^W)ESkCm^m$svfJNH35hV=hlG7)C}qoF7q{WH9eyyDrvS z#`L2y1??J)a0GxwFa|_2Mr1(7n*?Lx%*ceyH;EmRu^Q)*zO5riaw;!-80Xw*6oJVecPrjo*BK{OI=h7k3Xn{5@_wy1oDY8$Z+-$^f@k z@Yeuu5MKE_REXRrSVAEM1AL8$fGrGZ#w@53*IF=*jCF1x;Ttg4)LJOahJ%5Tso6#x zT;3#ejmjShX%@&|eAl6HveFi1#~QqAUwqad0Du3oLTrPW5P6Y6hPqL@yiFjZkGMf}44Xg^K=XGG52XFoasN>yRhYz1T`_&`Y(%xtHK7V@m zVE4VlJ9qa!y?5}*-?cH|hMBKWuZ$o5X?*JzusnO`@!mgo$M@el{LSxl;p?kQpys?d zJ;#bzl1fcmx71L%6`Ovl!?$Hn`Tv!nMjesAlbS8m4+h;R&-P zgjl7`x|Y5TUD*N^F?*hzBZudw_)S^LSix{H!;68|lYnNVpSwx&IahKr@zO9!<2`>=z043tWGrzqb7nGwh0bVx(%}$x zxTj&7vH}eojEt8etQX01Q;;=1h6*ibkU5DuK^#=#LcLaGN{VRg}?43J%Pd@ol zgmw4IwXkU%NBxxv@YB^xT?lAe>Jtb@<7peja9bu9FVO2@TQXeKC{!vQ4{rA20h&$* zs?l0Elj>T}4OPBL@L0v2=eP6b*sdP8^#bl@8-S90o(Q?!i9rWz{FiWZ3VzI?I zq!1&;+U3=NyHY6UnPgJ%chmiPT}*enPUl)87~Sd(qvbW_I>gPK$QRw68gkaVIjUD} zw9wDHIfj8}J3L=v*!4 z#c(%}clKjND!Q0YY_1Bau+nL`>#lyn?{Ep-NIli}<`c=Gq(&m^-FhzB@@(bkY$8CX zX?4{dV?si;+^KRAD&-TiYss8F)lUrTX=iOSP!e5(gg2ILZDcxfcn}CJIs)->r2^-a zvh_;8m0I^zw_02LW?=*QC`Y_qvq$Q|Y&J-51shV|*UN6Yml7!<*U1M8gV<)%m1`G6 zywkCfmwkcdW?6A3)6sgSAo&p;pju5wwV`-(@^We5&c?RlF6ZL9kk4e67yW(NQ={vF zrM4=1R3%#$KsGMqS7VDU=oUhehJTqV-MTtT|!8zC;8!Zr$5+mZbs-x zv(T?N-E?$yE7Pm3i_u8Yu5J|9?IFGzuKT0$XpOoqbW^C4RHRhbQK)tTbUjQ9oopvK z;FGT0ay;EAp^&KfGXkAp!0Wg&s|BPs2E#_In`*inR4|5opq8N?vym)h%XRNke>Ey* z3YkE3Fi17*Wg%B%?9Em@d-bZGO^4H=7n;=}b|_zvS0^5FWDe(YYqxr%S{|lYt^BNOVjPLoXSI7pF1wxe4h7 z3MaTN_$^}D5yi5QBC8GDo@3dLT53!vGc1eRWtNrBz}llZSt%)exyivV64FD%w_sfJ z*3$QI3#Zm6Dx8Z+IIF^OMV^DoYBU+Frnz}5JQ`)eDlK3xEG$Nk_-)i~a#u3yR)a5N t*=n-Z^KP9K)Fh=xDNXQrixb;wr_l01>udVOeuVedf{BT=f^^Oq{|jLSVetR} diff --git a/utils/__pycache__/get_mongo_log.cpython-36.pyc b/utils/__pycache__/get_mongo_log.cpython-36.pyc deleted file mode 100644 index 3002a855c91f77d4d74c3c464d9875112c2ef9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2130 zcmbVN-EQ1O6rQoiUhhwuCV`e95DQ`}St2Q=QiWCsHKc`t=q7482gi5 z8Up-%%<>pSvVci0t&|5GtDRbz9oU>?A{ChvIGG59`LXLitp#FI@(nlmeC$(C%tU_o12d(7{Q?{UUj8~=B-y4~*ANg8(t!z}*m_h0ad zaTMz?EskjOL0m>EInhax_vw3Utd9%TC#`yH$t=l}QmdgZ6lutzzPQQgeD>*`&u`zm zefQ1aZ66Qwqqw^j>Ev0WPYsIs+ZW6E6a6=M;|zgf1D{vk&cP^-^taNtDnVvc9#NfS zF?O3UQ-`O+ERE>E`LMv;$1L9hi5cR|0*hjf*x1rWY(&-mZf|GsFpmlutB4NJpw-6Q z#w;I!Xg1}V&n&g7ttp@Jy;@>Ja%;**LSD!m$ofWR89jH@7&P9H+Y9(comwK2-u_7FmjQ}c2-M|BPNG2-+SBX(s+g0 zIMw8xGENUGUi`+?61M)?c-Y_HJ&lfsD%({BIkDW|IVtzYI!ViYN~f&Ij|xhv&688r z!kM=*%WEKvx44H{|0Zjfe6=}$aR48BVVEOF!?0?FxJ`~z;yYpZ(|DNHJLX;k=n|nP z41S7FNyd8Ie7`=5pFrW&C`y573h77}t0NoI!|KW=oZYIt$7I|0#nDTlC1;w@J^`aq z@iRVUA=lQ(p0W}0W1UHRoh^8=&Sn-g1SB+T4QHK^PUt}5Ou6A*$?&c_n6!*jHz_3p z*YGkBk9PK+24Z*T$Ty{KQ+UF_s9fZ0taP2Dc3%8E2N^VAnT8oxfU28#sHG zm+J6ih-z#zHli{XGa!^e_nd1%RY^gE`<;OzJI?49Mda*X4Bx5Iio+zAsFFhIz)6!V z(UnNiBdLMUO z0%NRPz34pD#;E<=fm%uD8SmhyJ_P4?szw;fA__y*#CISLsOb?rlW(RIsx{hKHXUtq q@mFA~%d`_?p1JN4iiJxm?~A%;eMuoJ$)y5aufwkswO8BMR{sMF{keGn diff --git a/utils/__pycache__/get_verbose_name.cpython-36.opt-1.pyc b/utils/__pycache__/get_verbose_name.cpython-36.opt-1.pyc deleted file mode 100644 index de9cec9f6037a1190597ff9dd05cecd48f429f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmbVLL2DC16rR~#O}exgJc%IeNrZY)%|3W<_r3Yv_h!GDy*M?c>*}f7Csl-g zqcKz9{VKShfIv_N5loaS%3z}2L`f}3V}$f`|7*Ho7}uCXjRiYT_d1)9f-O>REmQBV z>r<-$3lcR?{jA4|oVf*4=IMYhxt=NELrar9D=?pXHg`RVAT}RSMwkoJGnZ4BQZv(s z+vwbqU09?>I?LHI2QO49S9sk!cX6&w=}AAe2!KHV%6u+~b;94nP5(`4Y1B;QUfl8=~5Nc?lVhN&IzziqL=d_L-JKUX-(k4>_ zR0080hf2(dg%JtCU*Z)4Vq$0Fy$eaR(kH!l_rBk~-z_gLI{O>vADbp2-^d(+PF8{C zWe}VMgi~&$v}*(g#k-lBfw@7r#VaGiD|<#@akE9dYOz8IajyI?Ij-y8P14wHhTZu0 z*F#W&k}OfIA9ho8ug5YHNlzttR!6;2sO?XQ)-h~9IM5uCs5j<2!wRFt&tJhZi z8~*a~23*??v#r=|L@IfjsJ@=!U+<%1+M<4p9=~AO#G|EsyV1JC*6(dLBeYD(fXgbd zyZ|C50R>ZbG866YmrbA<3 zw8#UpNgl#$aQ-5MP{du+c>mq_{mb#I1N=Wf4qkl!@@eL)i&zyRtGlzH@!Quw4@cwY z&&D4=&xNUeFRr^hiPX&4^sLg#dvPWz(5|$wd}*b5$URe3!4xc@iQ$Gy3%98^G!gi! za$&ZZbD&DhA=Mgn=*~&KkD0saRd8>(XU0m0v2MHV%6u+~b;96+~NGyoK1B;PpfJ&&c5Nc>k#S%)pfQfXnd`{!YAK~tdls1`K zpb`j}I#gmtER0A9{t~Yc5EDBS?>QvRN}u%J-Mjbwez!C~Zyj!2e5~t)d?PaiI#~gh zS3q#$5l*=l(?s($ig!KMJ$-|4gI5j+uk34{!S!w8RP$v@h;{XU$+B(xZWM=h(@(m8eHx8=}u@j0u?=tRKM)vU+t4)Qo=n&jbE^A;?Tmp)7V~TYxlOA0lrK~gUbrA zyaXa79tB`D1m=KvI@h@YCjf#l6viW1TYwQrcp{{$!16o@PP;_W0o~UIglU{WjMm(> z_J;K!OWXCmp`#bob|w;E2@EcbHlX8Zg(1VZU6`n)0M!Q~Ofdg(*4@@-Kj`=(*%Vnf z43uo$@5xrKqFA=3I4<`3g~?c{Gwef_9n#%-YD3E&TvggwszmwjJ`iy{NkrTg^F z*&$V0SBDAcP#b95V^qp~^+- z+Eb^|+t)vj4@S?QjXr*!aZ~+X=-NCA)bz3G7=@Ab!cC@>awc1uyqv(i QHSXj#x|IVMv<8{~0vU4z`Tzg` diff --git a/utils/__pycache__/log_websocket.cpython-36.opt-1.pyc b/utils/__pycache__/log_websocket.cpython-36.opt-1.pyc deleted file mode 100644 index e2033c39dfd6ddce1275fe8e9270c0ec103403a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1638 zcmbVMNpIXX6ecA~BgY57$+Mu#p`pN!+uQiwCw{iG6UM*4|LnC#$Zuq$ zF_<4i*PjD$G9;XGr=UaHjLy)3(JkBw8!}41CY*8a72%#>3wP*o=R4B#>qAONxc`4! z7)8-nSs|i9G7*3N`V%anrLxrZL@15NUkIJ5tTLG_k8pibo3T_!DA%?VKFP{V8?#vwS?h!!Npx28{LFV4fQ;#7D zTVOrp;mpgo`SyZlbO9eF&mTW+Q_~$-X2eS~ebleD>Yrz2U+ZzSUq#oIRAwGs*IKCg z@%310SgnLik`<%q8dEd^y3Z{`am!HJG8DGK^03F$Hr!KTUDOW3F2MIa*ZSIUS(|1Q zN?A{jMNteppqZ5;IrVBY+CS`dEz7kmtyjo|YwM4snk2@Cx<0RzOoi6gJCl_tEj#<> z>`V0)n74rv2`{ozfK>zk8& z8fjS4LV(scsGvkDvP93R32d2DD7 z4;E0w0SdT3J8cOYX0yR`cSW@Wyr2p}3rTLSD$y=nbqDs;+Xx>tr|V1q{a&|M)?%LN z8NtSgobxgc-l%)=z|LZMa$ClkEk%Wjp~Mr X#$!{^;9(o%BV?(@Ee4kjXxIG<Y}TbY^$GUfXHYrU(cJFd!p*NK&XkU@FuvpnTLpq?ay-#o5^;YpuOuc3dfz zDGDd5bWUWseh<^=LiU)$JU!SnfEn^T5fo0&ogl%`Px)hLlHIyD1_0iT}Iu#bWVI zKk$mxTEqM6_bc!TYu*!1BW%uxP7uzc$N?{MxxXmwdTB6-0KSes4te36}`I$fBh>e4{^sjq>EI` zR9e%sb(R4%R@m3XNF-*mKU){KS`y8_3+vnp`m*O)QRpi<1-Cu9syK>y|S^VW0 zG$8)z*4ock@BVfzKL1(YpoFFla?uW4_^$)(2Z#;=5~M=~?P`2XXdT+6GYLfp%5xoB zH`sud0a``TG$m)&vvsQj`dutCz1rShIxr$-5dsyqjA!xM`4qjxXm(euGR_!#yj$YIZ4AG3Ev8=zn_{CUL?ZB zXlfduCHx?oN(*yxafuf|Y8)U!aYFOd0!V)C9YX=1?A=j?L|Bf~glcyjnRlSfSu4Q( zh~s?Rss%kx)^S+qI*z(P*)oJi;VNbNBX~1R4p0Wir@o7?e-6!%^hbR2>-f_ftCz0D zcP>FwxM2`Li^4P-4hd2#y@vWvh4_oJ_pYxfwGADESyZ|D2sQ!+beGm?mvo4u3B7J~ zNL^#vIAQuY(0Y4goOCsi$N&W)k;sfgMFQ0X3WB0`Xpfp@1bjBD?Yzp}E zV2&Q6Lhr@EXt^MenzVNAm-zg})zhD>etSA`aBX=d{^LR_Q0aH<17$D@m0|!7Y^o>? z9H#3yZ`S{TRW=gmjXA#wl@x_sNCP$cVW50-0Ge9BSvNKK|4t2$Uc4Qg(xqwaUNw00*?(d*b&5qe?3V>Uv!A=bx6t^B`w CJhP(! diff --git a/utils/__pycache__/mongo_log.cpython-36.pyc b/utils/__pycache__/mongo_log.cpython-36.pyc deleted file mode 100644 index 13fdd69998b0a3aec9c373b2ab572e1c46c06a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2741 zcmbVO-ES0C6u)<7c6N6A0Te}RG_EA8*@qSsL(EDP1OyFi8_Nr0lW{wD+RkQnr{1|s z(#?_(7Z8*WV*~^tk;Ddk0PB;28vc)Yl_~9$@4o0ccV=e`781G5J$vWebMHMLzjIEv z4GiQLF2DKlHG_~p$*Q5jdMC_a76>CIVU#HzH7We6o>Es$l_F2`w0g$O)HPF+--@T3 zI`A`Iwr-dPCHn}|S@t+#S%=ng9o5VM$6z_&1Z0^np*Kd^ZdskD;`n-&?@z}-c zZo>@(uL_@|1gnbPeNyI)t*^heW&4(GPp9PW*=l3PDeSU^d&Cv9IA z0^uT+5)F;9shVSp4_HYFH8dkMkP5f%z^-<9uUlXv6sqf=sQnHWUw!6zd~JRw(W-7Y~+;6D_05D&@kw z8@P=?R2#O#QIAjsNN`LE(}2}9I+3Gtp;in02G?NP|8&|o0Gtx02|x)Jn$Ces}wHJRe7~uKyEpK++z)n5*gs&j3qL|1Z6B8I5;J@O%raG5wKaWwDK~(qw|n( zrXDASsqG(|IAm($V;>zdl|Ap344wgP%p4RSVM$5N_8Ze-c5YstF#DwEc6+YV5Toxcapv(iR2I*$HiMBS#OCcPiU73fn50NiD z)ej4>kJMTRABti72x4{Sc#d%1 zMTKR=GOHpM?^PgU*1fTRa(q0_xb()niK+7jbc6 zap~;s<$K>PUqACux0DCdOzG9P1XuFd8U?WnD!ePcTV4bhK~rKc$nK;&vSlZk!(YPP zo@ZpG80!7Mgk25)Y1#*30iGv%KkcXd6_NNMjQkJK`4h4wjt&0}SDT$JZlOhXx0W{{nz{$^`%b diff --git a/utils/db/__pycache__/__init__.cpython-36.opt-1.pyc b/utils/db/__pycache__/__init__.cpython-36.opt-1.pyc deleted file mode 100644 index b4fbb068312868f638ab25dedf3e9cef21981f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmXr!<>k`(U>cpt$iVQJ0SN&43=TkC%mE})7@`7bW&ycC5FekJmst`YuUAkBQs9zWoLrPyP?DLSX9eOrmX>7X7g>Q+LV#mR zE>J^pNl{`+ei2ATN@5AZG_V>Y149d412bJCOY$7)oROH9o~q!OT#{LqSyBmh2h?^1 zg|Nhm3|ss(8E>)2$EV~c$H%W^C}IMJFPQkHs9%y=T#{c2KczG$)s6=gH9*V&08Xc5Q2+n{ diff --git a/utils/db/__pycache__/__init__.cpython-36.pyc b/utils/db/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index dcc1d61374f5142ce32fac7c4ef8b69ca4bc317b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmXr!<>k`(U>cpt$iVQJ0SN&43=TkC%mE})7@`7bW&ycC5FekJmst`YuUAkBQs9zWoLrPyP?DLSX9eOrmX>7X7g>Q+LV#mR zE>J^pNl{`+ei2ATN@5AZG_V>Y149d412bJCOY$7)oROH9o~q!OT#{LqSyBmh2h?^1 zg|Nhm3|ss(8E>)2$EV~c$H%W^C}IMJFPQkH?P?VhP??;OSd<%3l%JKFTv8n4Ur-!V fT9TPl9Fvk1gA`u3IBatBQ%ZAE?RY?u1jGyggBEDV diff --git a/utils/db/__pycache__/redis_ops.cpython-36.opt-1.pyc b/utils/db/__pycache__/redis_ops.cpython-36.opt-1.pyc deleted file mode 100644 index 7102a8759de304fd9a67e83c7bc8f06acf691890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmdT||BoBR72nxi`!=@kOD@MjpnyrBtx=PsK|=I|P}9(W+UlqPiPS<}`8<1fPS##` zW)0lchax#`FGxA^0}X13P$~tHRy3qi1fc}_AMgk4uZ{1^Px+l6fX|!tuD_gpA!+kN z$C?@M&g`4_KJU$YZ|3pg;ndeFPrvfzPEGrd)=>=n|0$|`6b;w%8fRR0S)QRcT)k}M z4W>P-ag!%bXgtx-^Cs6{)N;w%Q%uuR`);+Qvf1q6lIvt=3T5ZUwX=9c5e_d&+p9_% ze#VhSQL6eSuQE-~2W$R$d$8!2UM=~HijUUn?XJDZ^lhxN3Ba|P91BJY6dIVril?ee6?rFccc#ko&pL}HNWJ_DLy+DQpM~2)y2TFZJ4cZ z+q>|EBtjaSU?Xg4r{V!0?vG{^bs9yXg~w2zMU^vX7AFCdf^rUEzNfEhOnX_Y956Ls zKb8{DF>M(ec4^WFl$;$+)QtvfFq-ol4OXKs8*dm#w2FQNPk`8{od!|bL#i~-T~sU| za~7K)ecJrj+v{gfxY%jeul{50lh2xOo^Sr4v3}+J+DC6)zxwyJGnX+OzS(Si-kPv- zxw-Pr#$PYe(1k0Tjf*ky>1sg~%Hdwe0_{CDEgZil!p*MOsND^wLV9a|zPxtoQuD$; zH?F)7ck%n>nOst&FdQV@YE3Q#JAVFp(NWGq5NJWd5yBHea?TUwf}b-*hTd9{SV8jD zf?IQBz#OHyuo=Z10oSPAgDNdFT2g0|Y>X|9#L7|YZPAP}@aOQs;#j1a23ywaK)0on zpWU)f$OXi(t$*;@=3g!}KmB;)-)}eHeJ@6L{lgEhUp)>zgc^wF-vZ1JVV#ZDPnvI? z31Pl*ZN;s6)f?AN_5<9cF)@yB6w-psSWKX4fh_LA|GD4=6>|z^Zr?HzNyn7JB_hDd~5FTjjM87}8zruHm6Ol7PtV}eFE{Afs%b^%O zPTu5Zhm$u|uJ$rW#xRFFKJ+8x*iRl`J9jd40P&pf?nDIAKy8zn8g1@gcOoc{>TxKW z-=IWpJn5<_w-5CLSoJV!4E0#(Rz}-yMXgXI9;q0paZK&@+&$5hJh$EzP4$jwigbBd ze*=+JMN>*x^cfYonk(nwvA0C7SYqzDj_>r9*a*XwSrGHG@78?~%)fvdZe6Csfx?Bh zWesT;Nk%GB{-E~mFYsbpa)l=})yG3p3vEbur9oQahS^08(kX@5!cJEfh|>TI<;D&HAt&GPo*2FYWu zDcuhA9JGmkOZ+R(0R@lrMoC(tzvt*S=37cb`l>ezK6*CvyyJK8=E$lIjNDAmVxZKI zU?rzh>Q-*h)-%X&(X&box`kfFp8U?aS6`uj5DVSBaF)_sm4PBPDi4(1q@nGE&w}P) z;lGbj7d2M-mc)qYZ&CUGCNb)Z!TsQ-b6;=1`^V<#m5!t^(z+=NoNp&N<%EM15yDzh zwa{oVc9n9s6GEcCMQ-KGy0!k_o4S&?BNZMfu_en+dDao~rcw_y_8&slMUpz&;w^o* z&wGlheba(GX6sIJPb1TH$1&8R*d3 zarDXI@i?kf=T5dX7Q5FLr7k59BhS-p3cV2{;c>KXtTGn9(;E~dz?312B8nVK$k zW}P5OXG*6Mof{s-u*g#LFf~2A{RrIjJCfUMH5C-`)oIo_P4ZA@abfS5065Ang8Mf4BykiQfXo4;$D!7re?I2~_ zWslczA7uv_+x}gx;D#fD;8dq%K}R`3vI$Cb1=)e1%tTPM7JI27k1oiw3EJd>Y+jI= zDOm(TD(DE(p>2h_I*Ai}WaM%W8jGb8R@%y_nz54j4XGdXhGklYp!v8d8nSKf6>VFP lHwn_X%$eIC-l>HLR+`pty})`Zl=x{f0d+HD>K4lw-vYKwJ+S}) diff --git a/utils/db/__pycache__/redis_ops.cpython-36.pyc b/utils/db/__pycache__/redis_ops.cpython-36.pyc deleted file mode 100644 index 29200c8bcdf82545c1485eb6bc91590ba8c23de2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2573 zcmcgu&2Jk;6rb4-d*e7C4Ny25I2n;pf>hBcLJesP;$R{;P?kumjc1ZLU3<;!y28al zksPFe2)&d-OND||XsFsGNEJzF8vX^&dnM~Qr`$R5-mbk)(?nGxV62(hnfK;>{ob4L zYaJblKj%+J(^AZe<=!8)wSyZPm%a)Xvb(xa42ve9kOPE@fbcIRp zlXR>!NC`>wK50v&QmJz}i>ESXp6_m4hb1(@SUEk0CpTts!?GtPxX9vuvq|uA8oDzG11A6r(Itdvmgq8*nF2FF z!(uS2EY38TW2}uOV2-nPmV{Yj9ROITr@e7id2yq zotLK-SW6WEe4bW_Au|GUlY#tu=xAsvjd|e@*~2Y z0#(i^_%d2@bCxs8#zsSVkVAdNvZomaq=;)6Pr+Fy@RxSeOUDA;aICLM&td^!L!NHv zK`h>Zk8)3iOf}+Bl_>du6#5n7N*5C13?=hf|d3$^9T zTWhy#S66@>?(9?_G#KVq{JC%IKQ02Pc4Nk0{kgum9?2gln!?P7MFl!q$=e`6xtM!4 z1$Rp#EVaPA(z9S}sHgVLN^O40zxiwZ-cL}hpH64eF#%Ty@l>l=awfgDv!7&nP^tn` z)l<0;w(w%(w#b`qS`lryt2N#A6x8ie9$*>{?Z6>AU_iAF3MX-i_8?rH5nO?`EULiv z5LR!)M!CC*Rh3Rl6^MBQsW+b(soNkfisV5^MS+K?Z*AVHf4%BozPf$q&eqxtz!d`J zum1)|Lry?-`_}!PYd3c{zN-Im#sB^Xe`dp?co4Eg4Oe2ZfHV?)$Yce zDB8u{jV}&DO+lLIgfjtLq6@z;>l;XkW4O_S0~XGHl%9sY7oj^?kt8P3BvlZnjtD1| z|F6RY@6w)v!b?cX1WD@8EkIl!Nz!JH#u&G_%a88wGvMVbk-s$Zw=42D)bJl%B8U21 zU)tP$uym-;vcuiSIqazyO{>HYg!nkPdlFp^3K3im3NaZu4C4PEd{bb=zQms3?!$TA z1X>2lFfn+wf5-z`qv5@DhfRw^<3^Y{N?$#>XYo3MnE9 zf`Z#jV6h0yAb~LzsAW$*VFiic>ca;JE6%~A8r2jn3BR}&6G(x#F>V;l&Kib@!&+~L g7jwKX{HqWaF|r*b+0zC?Bi}&D4nC=hq|v1O4*(mW1poj5 From 6277856cf9e7c060fca480bc82468919f864eb86 Mon Sep 17 00:00:00 2001 From: atompi Date: Mon, 19 Aug 2019 10:39:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20MongoOps=20=E5=B0=91?= =?UTF-8?q?=E4=BC=A0=E4=BA=86=20USER=20=E5=92=8C=20PASS=20=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=B7=BB=E5=8A=A0=E8=B5=84=E4=BA=A7=E7=AD=89=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commons/views.py | 2 +- utils/middleware.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/commons/views.py b/commons/views.py index 3e4befbf..9e899814 100644 --- a/commons/views.py +++ b/commons/views.py @@ -116,7 +116,7 @@ def system_log(request): # datatables客户端分页(一次性获取所有数据) @admin_auth def get_system_log(request): - mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL) + mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL, settings.MONGODB_USER, settings.MONGODB_PASS) start_time = request.GET.get('startTime') end_time = request.GET.get('endTime') try: diff --git a/utils/middleware.py b/utils/middleware.py index 23ebc1f6..1bca5fc4 100644 --- a/utils/middleware.py +++ b/utils/middleware.py @@ -65,7 +65,7 @@ def process_response(self, request, response): else: code = None - mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL) + mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL, settings.MONGODB_USER, settings.MONGODB_PASS) request_data = {'username': request.user.username, 'path': request.path, 'method': request.method, 'request_data': data, 'code': code, 'ip': request.META['REMOTE_ADDR'], 'datetime': datetime.datetime.now()}